Asp.Net Mvc 控制器與視圖的數據傳遞

 數據傳遞也就是控制器和視圖之間的交互,比如在視圖中提交的數據,在控制器怎麼獲取,或者控制器從業務層獲得一些數據,怎麼傳遞到視圖中,讓視圖顯示在客戶端呢?帶着這些疑問,我們接着看。。
   
     下面分別講解asp.net mvc框架中有三種數據傳遞方式,分別是:ViewData,TempData,Model
   
      ViewData:只能在一個動作方法中設置,在相關視圖頁面讀取,說得再白一點就是隻能在一個頁面中使用。
    
     例 在Action方法中設置:ViewData["Message"]="Test";
        在視圖中讀取:  <%=Html.Encode(ViewData["Message"]) %>
   
      TempData:TempData和ViewData有一點區別,ViewData只是單個視圖有效,而TempData則是兩個視圖有效,就是說TempData是可以在兩個視圖中傳遞的,如果中間沒有更新TempData的值的話,那麼從第二個視圖顯示之後,TempData所保存的數據就會丟失。(注:也就是說,只有更新過的,以及新添加的鍵值對才能再下次request中繼續使用),微軟爲什麼要這樣做呢,應該是爲了節省資源吧!因爲我們都知道http是無狀態的,每次請求的時候,他都要重新保存TempData的值(利用session保存,順便提一下,asp.net mvc裏面的session對象和web from是一樣的),但他又爲了不想浪費資源,所以就只保存一次!使用方式和ViewData一致,就把ViewData關鍵字換成TempData即可,在這裏就不列出代碼了!

       Model:通過設置,讀取ViewData和TempData屬性,可以將數據從視圖傳到控制器,也可以從控制器傳到視圖,看起來好像已經夠用了,但必需說明的是ViewData和TempData都是弱類型的,所以編碼的時候極容易出錯。這時我們可以通過在控制器的View()方法中,傳遞實例化的對象(例:View(類型)),傳遞實例化對象,由於是強類型原因,在視圖讀書時就有代碼智能感應,有利於代碼的書寫和減少錯誤!除了在Action裏面View的返回時需要帶上實例化對象外,在頁面還需要設置,在Add View時,會彈出以下這個窗口


在用紅色的線圈出來的下拉菜單中輸入對象的類型即可,在頁面使用的時候就直接[Model.屬性]就可以了!

例:<%=Html.Encode(Model.Name) %>

 

接着我們看看怎麼從視圖把數據傳到控制器,有好幾種方式

 第一:通過Request.Form讀取表單

     讀取視圖中文本框的值

    例:   <% =Html.TextBox("Name") %>     視圖代碼

           Request.Form["Name"] ;                   控制器中Action代碼

第二:通過FormCollection讀取

     讀取視圖文本框的值

例:   視圖代碼

    <% using (Html.BeginForm("About","Home"))
       { %>
    <%=Html.TextBox("Name")%>
    <input type="submit" value="submit" name="submit" />
    <%}%>

  控制器代碼

   public ActionResult About(FormCollection form)
   {
            string s = form["Name"];
            return View();
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章