【MVC】View與Control之間數據傳遞


1、 Controller向View傳遞數據

  • 使用ViewData傳遞數據【弱類型,字典型ViewDataDictionary】

  ViewData[“Message_ViewData”] = “ Hello ViewData!”;

  在View中讀取Controller中定義的ViewData數據,代碼如下:

  @Html.Encode(ViewData["Message_ViewData"])

  •  使用ViewBag傳遞數據  【動態型,dynamic】

  我們在Controller中定義如下:ViewBag.Message_ViewBag =  “ Hello ViewBag !”;

  •  使用TempData傳遞數據 【弱類型,臨時存儲,一次性獲取就沒了,實際上保存在Session中】

  我們在Controller中定義如下:TempData[“Message”] = “Hello word!”;

  •  使用Model傳遞數據 【強類型】

  創建強類型的View以后,View的第一行代碼如下所示:@model Test.Models.HelloModel 

  就代表了這個View使用的Model為“Test.Models.HelloModel”

  然后在View中讀取Model中定義的數據,代碼如下:@Html.Encode(Model.Name)

 2、View向Controller傳遞數據

  主要通過 發送表單的方式來實現。具體的方式有:

  • 通過Request.Form讀取表單數據【post】
@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post)) 

{ 

    @Html.TextBox("Name"); 

    @Html.TextBox("Text"); 

    <input type="submit" value="提交" /> 

 }

  控制器中

[HttpPost] 

       public ActionResult HelloModelTest() 

       { 

           string name= Request.Form["Name"]; 

           string text= Request.Form["Text"]; 

           return View(); 

       }

  或者

[HttpPost] 

        public ActionResult HelloModelTest(FormCollection fc) 

        { 

            string name= fc["Name"]; 

            string text  = fc["Text"]; 

            return View(); 

        }
  • 模型綁定
@*為了下面的submit可以post提交到eidt*@
@using (Html.BeginForm("Edit", "TestMovie", FormMethod.Post))
{
    //為了防止“過多發布”攻擊,請啟用要綁定到的特定屬性,控制器中加特性[ValidateAntiForgeryToken]
    @Html.AntiForgeryToken()
    <div>
        <input type="submit" value="保存" class="btn btn-default" />
    </div>
}

也可以
@using (Html.BeginForm())
{
    <input type="submit" value="刪除" class="btn btn-default" />
}

  控制器中

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID,Title,Director,Date")] MovieDB movieDB)

或者 public ActionResult Edit(MovieDB movieDB) //這個默認的模型綁定
        {
            if (ModelState.IsValid)
            {
                db.Entry(movieDB).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(movieDB);
        }

  當你的Action方法是以一個模型對象充當參數時,MVC運行時將會用模型綁定來構建該參數。

默認用於模型綁定的是 DefaultModelBinder,以上述的HelloModel為例,DefaultModelBinder將會檢索出所有可用的HelloModel屬性用於綁定模型。

根據命名約定,DefaultModelBinder能夠自動地在請求中獲取相應的值來填充HelloModel對象(它還能創建一個對象的實例來填充)

換句話說:假設HelloModel有一個Name屬性,那么模型綁定就會在請求中查找名為Name的參數。注意我說的是在“請求中”,而不是“表單集合”中。

模型綁定會在請求中的各個方面進行值查找,這里面包括路由數據,查詢字符串,表單集合。有必要的話你還可以添加自定義的值提供信息。

模型綁定不並局限於Http Post及復雜參數(如HelloModel),你完全可以傳入一個原始的簡單參數:

public ActionResult HelloModelTest( string name,string text) 

   // ….

在該場景中,模型綁定將會在請求中查找名。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM