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


數據傳遞也就是控制器和視圖之間的交互,比如在視圖中提交的數據,在控制器怎么獲取,或者控制器從業務層獲得一些數據,怎么傳遞到視圖中,讓視圖顯示在客戶端呢?帶着這些疑問,我們接着看。。
  
     下面分別講解asp.net mvc框架中有三種數據傳遞方式,分別是:ViewData,TempData,Model
  
      ViewData:只能在一個動作方法中設置,在相關視圖頁面讀取,說得再白一點就是只能在一個頁面中使用。
   
     例 在Act

ion方法中設置:ViewData["Message"]="Test";
        在視圖中讀取:  <%=Html.Encode(View["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時,會彈出以下這個窗口

Asp.Net Mvc 控制器與視圖的數據傳遞 - Ss_Andy - 什么都要試一下,這才是人生

在用紅色的線圈出來的下拉菜單中輸入對象的類型即可,在頁面使用的時候就直接[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();
  }

 


免責聲明!

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



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