• Asp.Net Mvc: 应用BindAttribute


    环境:

    Windows 2008, VS 2008 SP1, Asp.Net Mvc RC1

    ------------------------------------------------------------------------------

    前文我们讲述了如何实现自定义的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,还是留待下一篇文章吧。

    转:http://www.cnblogs.com/tristanguo/archive/2009/02/28/1400186.html

  • 相关阅读:
    oracle常用数据类型
    oracle修改登录认证方式
    oracle设定用户密码使用时间
    oracle口令管理之允许某个用户最多尝试三次登录
    oracle授权另外一个用户访问自己创建的数据对象
    D. Frequent values
    C. RMQ with Shifts
    B. Balanced Lineup
    A. Test for Job
    NYOJ 16 矩形嵌套
  • 原文地址:https://www.cnblogs.com/love201314/p/4995468.html
Copyright © 2020-2023  润新知