山西坦达清洁设备有限公司

现在的位置: 主页 > 在线留言 > 文章列表

文章正文

ASP.NET MVC Model绑定(一)

作者:山西坦达清洁设备有限公司 来源:www.sxtdqj.com 发布时间:2017-09-09 10:31:26
ASP.NET MVC Model绑定(一) IModelBinder、自定义Model绑定器简单实现

Model绑定器在前面的篇幅示例中也有涉及到,在本篇中重新讲一下,看过前面篇幅的朋友可以大概的浏览一下本篇,然后跳至下一篇了。

对于Model绑定器系统提供了一个默认的绑定器DefaultModelBinder类型,而它实现了IModelBinder接口,我们来看一下IModelBinder接口的定义,代码1-1.

代码1-1

复制代码

public interface IModelBinder

{

// 摘要:

// 使用指定的控制器上下文和绑定上下文将模型绑定到一个值。

//

// 参数:

// controllerContext:

// 控制器上下文。

//

// bindingContext:

// 绑定上下文。

//

// 返回结果:

// 绑定值。

object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext);

}

复制代码

看到代码1-1中,IModelBinder接口中定义了一个BindModel()方法,并且有两个参数,站群软件,通过系统提供给我们的注释了解到,一个是控制器上下文对象,还有一个是绑定器上下文对象,控制器上下文对象的意思就是在当前控制器所执行范围内的所有基础信息都包含在其中,同理绑定上下文也是。后续的篇幅会对这一系列的上下文对象作详细的介绍,这里就带过了。

现在我们来实现IModelBinder接口定义个自己的Model绑定器,当然了也可以继承自DefaultModelBinder类型重写一下BindModel()方法。我们来看一下我们的自定义实现,代码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 = "测试人员",

RegistrationDate = DateTime.Now,

Address = new Address()

{

AddressName = "天空之城"

}

};

}

}

}

复制代码

对于ConsoleApplication2命名空间的引用是因为ViewModel被定义在了那里,也就是代码1-2中BindModel()方法所要返回的类型,在代码1-2中我们只是简单的实例化了一个ViewModel(Customer类型),实际可以做的操作非常多。我们再看一下ViewModel的定义,代码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="注册日期")]

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元数据系列。

现在我们看一下控制器方法的定义,代码1-4.

代码1-4

public ViewResult Show(Customer customer)

{

return View(customer);

}

为什么ViewModel要以作为控制器方法参数的方式来进行Model绑定呢?这个疑问在下篇中会解决。

看一下代码1-5,作为Show方法对应视图的代码:

代码1-5

复制代码

@model ConsoleApplication2.Customer

@{

ViewBag.Title = "Show";

}

<h2>Show</h2>

<p>@Html.EditorForModel()</p>

<p>@Html.EditorFor(m=>Model.Address)</p>

复制代码

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:神农架SEO http://shennongjia.raoyu.net


COPYRIGHT © 2015 山西坦达清洁设备有限公司 ALL RIGHTS RESERVED.
网站地图 技术支持:肥猫科技
精彩专题:网站建设
购买本站友情链接、项目合作请联系客服QQ:2500-38-100