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

译者 郑柯 InfoQ中文站总编。做过开发,当过PM,干过销售,搞过市场,最终还是回到媒体。实用的理想主义者,相信:每天改变一点点,这个世界会更好。

This entry was posted in ASP.NET, MVC, UI. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s