【问题标题】:Is DataTypeAttribute is a validation attribute For DefaultModelBinder ClassDataTypeAttribute 是 DefaultModelBinder 类的验证属性吗
【发布时间】:2011-11-12 20:15:24
【问题描述】:

我刚刚注意到DataTypeAttribute 类继承自System.ComponentModel.DataAnnotations.ValidationAttribute

就 ASP.NET MVC DefaultModelBinder 类而言,DataTypeAttribute 是验证属性吗?通俗点说,ModelBinder 是否根据DataTypeAttribute 验证对象?

例如,如果我将DataType 属性指定为DataType.EmailAddress,它将验证电子邮件地址还是该属性仅提供对象的元数据。

更新

我在 SO 上发现了一个类似的问题:

Is the DataTypeAttribute validation working in MVC2?

因此,据此它不能用作验证属性。那么,如果它不作为验证属性,为什么它是从System.ComponentModel.DataAnnotations.ValidationAttribute 继承的呢?

【问题讨论】:

    标签: asp.net .net asp.net-mvc data-annotations asp.net-mvc-validation


    【解决方案1】:

    DataTypeAttribute 本身不包含任何验证逻辑。

    它派生自 ValidationAttribute 的原因是,您可以创建一个新的自定义数据类型类,它既是 DataType 又是 Validation,它们都封装为一个。这是 .NET 不允许多重继承的不幸副作用。

    所以,是的,它是一个验证器……默认情况下不进行验证。它正在耐心等待您完成繁重的工作。 :)

    实际上,如果您查看 MVC 3 Futures 内部,您会发现我们利用它创建了新的自定义验证器,我们知道 jQuery 已经能够提供客户端验证逻辑,并且我们添加了镜像服务器端验证逻辑(并为模板保留了 DataType 的优势)。

    【讨论】:

      【解决方案2】:

      基于 MVC3 源代码,DataTypeAttribute 的唯一用途是填充 ModelMetadata.DataTypeName property 。并且此属性仅由 EditorFor/DisplayFor 模板生成使用。所以你是对的,它与验证无关。所以不知道为什么继承自ValidationAttribute。也许框架作者保留它以供将来使用。

      【讨论】:

      • 模板引擎使用它是有意义的。但据我所知,razor 视图引擎默认情况下不会生成 Html5 元素。你有没有深入了解他们是如何使用它的?
      • No for e.g.: DataType.EmailAddress 它不会生成 <input type="email" /> 它只会用于 Html.EditorForHtml.DisplayFor 方法来获取默认模板。用于电子邮件的是显示模式下的 mailto 链接和编辑模式下的文本框。
      猜你喜欢
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2014-08-15
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      相关资源
      最近更新 更多