ASP.NET MVC模型綁定
模型綁定(Model Binding)特性使用請求數據來創建強類型對象,以此簡化控制器的動作。Jess Chadwick 在 MSDN 上的一篇文章中深入探索了該特性,并研究了復雜的場景,包括缺省模型綁定器不滿足要求時如何定制。
ASP.NET MVC 模型綁定是什么?它讓下面這段代碼:
public ActionResult Create (){
var product = new Product () {
AvailabilityDate = DateTime.Parse (Request["availabilityDate"]),
CategoryId = Int32.Parse (Request["categoryId"]),
Description = Request["description"],
Kind = (ProductKind) Enum.Parse (typeof (ProductKind),
Request["kind"]),
Name = Request["name"],
UnitPrice = Decimal.Parse (Request["unitPrice"]),
UnitsInStock = Int32.Parse (Request["unitsInStock"])
}
};
可以這樣寫:
public ActionResult Create (Product product){
// ...
}
ASP.NET 會自動將查詢字符串參數名稱與強類型對象中的屬性名稱相對應。這也支持 JSON 的 post 值。模型綁定支持更復雜的狀況,比如集合與嵌套對象,不過在使用集合時你必須小心語法(其中要使用索引器來表示集合中的數據項)。
某些情況下,讀者可能希望使用自定義的模型綁定器,以擴展現有的模型綁定器。常用的例子是將接口與抽象類綁定,這需要與下層業務模型的高度耦合,因為在運行時,綁定器需要基于請求數據選擇特定實現。Jess 的文章展示了如何實現,只需繼承 DefaultBindingProvider,并重載需要的行為。想知道如何對自定義的模型綁定期進行單元測試,可參考 Scott Hanselmann 的文章《分割 DateTime——對 ASP.NET MVC 的模型綁定器進行單元測試》。
查看英文原文:ASP.NET MVC Model Binding