建立--前台表單資料送出到Controller
參考室友的意見 + 斷點,這裡 浏覽器解析Razor 文法是 将 BeginForm 解析為From表單,對于HTML來說是,是不存在實體類之說的,表單送出的值僅僅是以鍵值對的方式進行存儲後送出到指定的Action中.
1 .在Controller中對應的Action的方法體中 将 Student 作為參數來接收
既然View中不存在将送出的内容綁定到 實體類中,那麼輸入的資料為什麼在Action的參數Student中可以點出來? 實際上 View 中Post送出的資料 是以鍵值對的方式進行存儲,然後映射到送出的Action中的 Student中,前提是 View中的鍵名(Name名字)必須要等于 實體類型的屬性名,否則無法映射
2.在Controller中對應的Action的方法體中直接設定參數來接收值 ()
運作項目,其中Stu_Name、Tel 有值,phone 無值,當然這隻是佐證,如果在前台的View 中設定的名字不一樣,背景用Student去接收,同樣也會得到空值。
背景傳遞資料到前台
1. 顯示某資料清單 ,同樣是背景Controller 将 查詢的結果 指派給一個實體類對象,用反射也好,反序也行,再 Return View(實體類);
前台最上面要引用 @model 指向實體類 來接收傳遞的資料,因為是同一個實體,直接映射到前台,最後View 中進行顯示即可
2. 當然還可以選擇 ViewData 和ViewBag 在背景的Action中指派,然後在View中接收,關于這兩者的比較,這裡簡單的整理下
ViewData 的 ViewDataDictionary 是一個特殊的字典類,當在控制器中使用 ViewData["CurrentTime"] = DateTime.Now; 其實是将這個值以鍵值對的形式進行存儲
ViewBag不再是字典的鍵值對結構,而是dynamic動态類型,它會在程式運作的時候動态解析
MVC 進階程式設計中提高兩者的差別
①隻有當要通路的關鍵字是一個有效的C#辨別符時,ViewBag 才起作用。
例如,如果在ViewData["Key With Spaces"]中存放一個值,那麼就不能使用ViewBag通路。因為這樣根本就無法通過編譯。
②動态值不能作為一個參數傳遞給擴充方法。因為C#編譯器為了選擇正确的擴充方法,在編譯時必須知道每一個參數的真正類型。如果其中任何一個參數是動态的,那麼就不會通過編譯。
例如,這行代碼就會編譯失敗:@Html.TextBox("name",ViewBag.Name)。要使這行代碼通過編譯有兩種方法:第一是使用ViewData["Name"],第二是把ViewBag.Name值轉換為一個具體的型:(string)ViewBag.Name 。
說白了,ViewBag 就是在ViewData的更新版,兩者隻能在Action中起作用,當然,兩者的資料是可以互相通路
本文轉自xsster51CTO部落格,原文連結:http://blog.51cto.com/12945177/1950802 ,如需轉載請自行聯系原作者
mvc