ModelMetadata系列的結(jié)束了,從本篇開(kāi)始就進(jìn)入Model綁定部分了,這個(gè)系列閱讀過(guò)后你會(huì)對(duì)Model綁定有個(gè)比較清楚的了解, 本篇對(duì)于Model綁定器的最基礎(chǔ)的應(yīng)用作個(gè)簡(jiǎn)單的示例展示,目的在于讓大家事先了解一下Model綁定器是什么樣的便于后續(xù)篇幅的理解。

IModelBinder、自定義Model綁定器簡(jiǎn)單實(shí)現(xiàn)
Model綁定器在MVC框架中的位置
MVC中的默認(rèn)Model綁定器生成過(guò)程
IModelBinderProvider的簡(jiǎn)單應(yīng)用
IValueProvider在MVC框架中生成的位置以及過(guò)程
IValueProvider的應(yīng)用場(chǎng)景
IValueProvider的實(shí)現(xiàn)之NameValueCollectionValueProvider
Model綁定器在前面的篇幅示例中也有涉及到,在本篇中重新講一下,看過(guò)前面篇幅的朋友可以大概的瀏覽一下本篇,然后跳至下一篇了。
對(duì)于Model綁定器系統(tǒng)提供了一個(gè)默認(rèn)的綁定器DefaultModelBinder類型,而它實(shí)現(xiàn)了IModelBinder接口,我們來(lái)看一下IModelBinder接口的定義,代碼1-1.
代碼1-1
public interface IModelBinder
{
// 摘要:
// 使用指定的控制器上下文和綁定上下文將模型綁定到一個(gè)值。
//
// 參數(shù):
// controllerContext:
// 控制器上下文。
//
// bindingContext:
// 綁定上下文。
//
// 返回結(jié)果:
// 綁定值。
object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext);
}看到代碼1-1中,IModelBinder接口中定義了一個(gè)BindModel()方法,并且有兩個(gè)參數(shù),通過(guò)系統(tǒng)提供給我們的注釋了解到,一個(gè)是控制器上下文對(duì)象,還有一個(gè)是綁定器上下文對(duì)象,控制器上下文對(duì)象的意思就是在當(dāng)前控制器所執(zhí)行范圍內(nèi)的所有基礎(chǔ)信息都包含在其中,同理綁定上下文也是。后續(xù)的篇幅會(huì)對(duì)這一系列的上下文對(duì)象作詳細(xì)的介紹,這里就帶過(guò)了。
現(xiàn)在我們來(lái)實(shí)現(xiàn)IModelBinder接口定義個(gè)自己的Model綁定器,當(dāng)然了也可以繼承自DefaultModelBinder類型重寫(xiě)一下BindModel()方法。我們來(lái)看一下我們的自定義實(shí)現(xiàn),代碼1-2.
代碼1-2
using System.Web.Mvc;
using ConsoleApplication2;
namespace MvcApplication.Binders
{
public class MyCustomModelBinder:IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
return new Customer()
{
CustomerID = "010",
Name = "測(cè)試人員",
RegistrationDate = DateTime.Now,
Address = new Address()
{
AddressName = "天空之城"
}
};
}
}
}對(duì)于ConsoleApplication2命名空間的引用是因?yàn)閂iewModel被定義在了那里,也就是代碼1-2中BindModel()方法所要返回的類型,在代碼1-2中我們只是簡(jiǎn)單的實(shí)例化了一個(gè)ViewModel(Customer類型),實(shí)際可以做的操作非常多。我們?cè)倏匆幌耉iewModel的定義,代碼1-3。
代碼1-3
public class Customer
{
[HiddenInput(DisplayValue=false)]
public string CustomerID { get; set; }
[Display(Name="姓名")]
[UIHint("Password")]
public string Name { get; set; }
[DataType(DataType.Date)]
[Display(Name="注冊(cè)日期")]
public DateTime RegistrationDate{ get; set; }
[UIHint("Address")]
public Address Address { get; set; }
}
public class Address
{
[Display(Name="地址名稱")]
[MyCustomMetadataAware]
public string AddressName { get; set; }
}代碼1-3就是ViewModel的定義了,其中包含的一些信息有不清楚的可以在看完本篇后去看ASP.NET MVC Model元數(shù)據(jù)系列。
現(xiàn)在我們看一下控制器方法的定義,代碼1-4.
代碼1-4
public ViewResult Show(Customer customer)
{
return View(customer);
}為什么ViewModel要以作為控制器方法參數(shù)的方式來(lái)進(jìn)行Model綁定呢?這個(gè)疑問(wèn)在下篇中會(huì)解決。
看一下代碼1-5,作為Show方法對(duì)應(yīng)視圖的代碼:
代碼1-5
@model ConsoleApplication2.Customer
@{
ViewBag.Title = "Show";
}
<h3>Show</h3>
<p>@Html.EditorForModel()</p>
<p>@Html.EditorFor(m=>Model.Address)</p>這樣就完成了基礎(chǔ)的工作了,不過(guò)還是運(yùn)行不了,因?yàn)槲覀冏远x的Model綁定器還沒(méi)有定義到系統(tǒng)中,在項(xiàng)目的Global.asax文件中的MvcApplication類型的Application_Start()方法中添加如代碼1-6。
代碼1-6
ModelBinders.Binders.Add(typeof(Customer), new Binders.MyCustomModelBinder());
當(dāng)然了也不限于在這里添加,只要在授權(quán)過(guò)濾器執(zhí)行之前的任何一個(gè)地方都行,因?yàn)樵谑跈?quán)過(guò)濾器執(zhí)行過(guò)后便會(huì)對(duì)Model綁定器進(jìn)行生成了,下篇會(huì)有講解。在這里添加只不過(guò)這里是MVC最先執(zhí)行的地方。現(xiàn)在我們運(yùn)行查看結(jié)果了。
圖1

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。
新聞標(biāo)題:ASP.NETMVCModel綁定(一)-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://www.chinadenli.net/article12/dgesdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站策劃、用戶體驗(yàn)、虛擬主機(jī)、標(biāo)簽優(yōu)化、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容