Asp.net MVC中 Controller 與 View之間的數據傳遞

在ASP.NET MVC中,常常會在Controller與View之間傳遞數據ajax

一、Controller向View中傳遞數據spa

(1)使用ViewData["user"]code

(2)使用ViewBag.userorm

(3)使用TempData["user"]對象

(4)使用Model(強類型)blog

區別:input

(1)ViewData與TempData方式是弱類型的方式傳遞數據,而使用Model傳遞數據是強類型的方式。string

(2)ViewData與TempData是徹底不一樣的數據類型,ViewData數據類型是ViewDataDictionary類的實例化對象,而TempData的數據類型是TempDataDictionary類的實例化對象。it

(3)TempData實際上保存在Session中,控制器每次請求時都會從Session中獲取TempData數據並刪除該Session。TempData數據只能在控制器中傳遞一次,其中的每一個元素也只能被訪問一次,訪問以後會被自動刪除。io

(4)ViewData只能在一個Action方法中進行設置,在相關的視圖頁面讀取,只對當前視圖有效。理論上,TempData應該能夠在一個Action中設置,多個頁面讀取。可是,實際上TempData中的元素被訪問一次之後就會被刪除。

(5)ViewBag和ViewData的區別:ViewBag 再也不是字典的鍵值對結構,而是 dynamic 動態類型,它會在程序運行的時候動態解析。

二、View向Controller傳遞數據

在ASP.NET MVC中,將View中的數據傳遞到控制器中,主要經過發送表單的方式來實現。具體的方式有:

(1)經過Request.Form讀取表單數據

View層:

@using (Html.BeginForm("HelloModelTest", "Home", FormMethod.Post))
{
    @Html.TextBox("Name");
    @Html.TextBox("Text");
    <input type="submit" value="提交" />
}

Controller:

     [HttpPost]
        public ActionResult HelloModelTest()
        {
            string name= Request.Form["Name"];
            string text= Request.Form["Text"];
            return View();
        }

(2)經過FormCollection讀取表單數據

[HttpPost]
        public ActionResult HelloModelTest(FormCollection fc)
        {
            string name= fc["Name"];
            string text  = fc["Text"];
            return View();
        }

(3)經過模型綁定

  1)、將頁面的model直接引過來

[HttpPost]
public ActionResult HelloModelTest( HelloModel model)
{
    // ...
}

  2)、頁面的元素要有name屬性等於 name和text 的

 public ActionResult HelloModelTest( string name,string text)
{
    // ….
}

(4)經過ajax方式,可是裏面傳遞的參數要和Controller裏面的參數名稱一致

相關文章
相關標籤/搜索