1

我刚刚注意到DataTypeAttribute该类是从System.ComponentModel.DataAnnotations.ValidationAttribute.

就 ASP.NET MVCDefaultModelBinder类而言,DataTypeAttribute是一个验证属性吗?简而言之,ModelBinder 是否根据DataTypeAttribute

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

更新

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

DataTypeAttribute 验证是否在 MVC2 中工作?

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

4

2 回答 2

4

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

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

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

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

于 2011-11-22T23:05:11.923 回答
1

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

于 2011-11-12T20:47:12.907 回答