0

前文我们讲述了如何实现自定义的ModelBinder,本文继续研究如何使用BindAttribute来定制Model绑定的Properties.

我们再次上一篇文章提到的Book类,BookController.Create Action,以及Create的View

Book类:


Create Action:


对应的View:


请注意,这里我们没有应用前一篇文章讲述的自定义ModelBinder。现在,当我们提交表单的时候,在Create的Action中,我们可以得到一个Book实例,这个实例的BookName, Author, PublishedDate均已如所期望的得到相应的表单的值。

好,现在,由于某些原因,有可能是安全性的考虑等等,我希望在Action中,仅自定绑定可靠的来自表单的值,也就是说,我希望对Model自定绑定的Property做过滤。

在Asp.Net Mvc中,BindAttribute充当了这样的角色。

BindAttribute中有三个重要的成员:string Exclude, string Include, string Prefix。
"Exclude"用于指定要排除的Property,"Include"用于指定包含在内的Property,"Prefix"用于指定前缀。

先说,"Prefix"吧,默认情况下,DefaultModelBinder可以自动识别以Action的参数名命名的前缀,也就是说,在上述View中,给每个TextBox的名称都加一个"book“前缀,不需要在做任何改动,在Action中仍可得到Book的实例。

加上前缀”book"的View:


这时,如果我们加的前缀不是"book",那么就需要BindAttribute的协助了,
假设,我们加上一个"b"的前缀:


那么,为了在Action中得到相应的Book实例,需要在Action的Book参数上应用BindAttribute:


现在来看"Exclude"和"Include",其实这两个东西一次应用一个就可以了。现在我希望Binding的时候将"BookName"和"Author"都排除(当然,这里这样做没什么意义)。出于简化问题的考虑,View去掉TextBox名称的前缀:

然后,将Action改为:


默认情况下,多个Property用逗号隔开。

BindAttribute出了可以应用在Action的参数上外,还可以应用在Model类定义中:


如果在Model类定义中,和在Action的参数上都应用了BindAttribute,那么则会取两者的交集。个人认为,还是应尽量避免它们打架为妙。

好了,BindAttribute就讲到这,本来要结合BindAttribute继续改进上一篇文章的SimpleModelBinder,还是留待下一篇文章吧。

Copyright作者: Tristan G 
本文版权归作者和博客园共有,欢迎转载 :-)

转自:https://www.cnblogs.com/tristanguo/archive/2009/02/28/1400186.html
关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.