4.ASP.NET MVC 5.0 檢視之模型繫結
https://www.cnblogs.com/caofangsheng/p/10461192.html
當我們從控制器向檢視傳遞資料的時候,我們會返回一個ViewResult型別的物件,與此同時,我們在檢視中可以使用Model物件獲取控制器傳遞過來的資料。Model是WebViewPage泛型類的一個只讀屬性。
動態繫結和強型別繫結,有一些不同的地方需要知道。當我們使用動態繫結的時候,不能智慧提示出來:Model物件的屬性,方法等資訊,只能手動寫。使用強型別繫結就可以有智慧提示。
1.我們先看看動態繫結。
建立一個MVC專案:MVCModelBanding。
新建一個Home控制器。新建一個Employee類,新建一個Index檢視;
Employee類程式碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MVCModelBanding.Models { public class Employee { /// <summary> /// 員工ID /// </summary> public int ID { get; set; } /// <summary> /// 員工姓名 /// </summary> public string Name { get; set; } /// <summary> /// 性別 /// </summary> public Gender Gender { get; set; } } /// <summary> /// 性別列舉 /// </summary> public enum Gender { Men, Woman } }
Home控制器程式碼:
using MVCModelBanding.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCModelBanding.Controllers { public class HomeController : Controller { // GET: Home public ActionResult Index() { Employee emp = new Employee() { ID=1, Name="曹操", Gender=Gender.Men }; return View(emp); } } }
Index檢視程式碼:
@{ ViewBag.Title = "Index"; } <h2>Employee Records</h2> <ul> <li>@Model.ID</li> <li>@Model.Name</li> <li>@Model.Gender</li> </ul>
可以看到這時候,Model是動態的;
執行程式,看看效果:
好了,這就是模型檢視的:動態繫結,是不是很簡單?
現在我們來看看,怎麼使用強型別繫結吧。還是在Index檢視中,加入下面的程式碼:
@model MVCModelBanding.Models.Employee
執行程式:效果還是一樣。
下面,我們來討論一下使用強型別繫結的優點。
我們在Home控制器中加入一個Create方法,來看看不使用強型別和使用強型別,有啥區別。
建立Create檢視。
在Create檢視中建立一個表單。
@{ ViewBag.Title = "Create"; } <h2>Create</h2> @using (Html.BeginForm()) { <table> <tr> <th>ID:</th> <td>@Html.TextBox("ID")</td> </tr> <tr> <th>Name:</th> <td>@Html.TextBox("Name")</td> </tr> <tr> <th>Gender:</th> <td>@Html.TextBox("Gender")</td> </tr> <tr> <td></td> <td><input type="submit" value="提交"/></td> </tr> </table> }
在控制器獲取表單資料:執行專案:
輸入之後,提交:
可以看到,沒有使用強型別的時候,我只能通過FormCollection物件,來獲取表單資料。
使用強型別之後,我們就可以這樣:
執行專案,輸入值,點選提交:
可以看到,使用強型別,我們可以很方便的點出來Model的屬性方法,也不用Formcollection獲取表單值了,但注意,這裡還是可以通過Formcollection取值。看下面:
大家是否有疑問,什麼時候使用動態繫結,什麼時候使用強型別繫結?很好,這個想法很好,當我們向檢視傳遞任何型別的model物件的時候【不依賴於任何條件】,這時我們只能使用動態繫結,如果model的型別是確定的,我們最好使用強型別繫結。
好了上面就是,模型檢視的動態繫結和強型別繫結,大家學會了麼?