我刚刚注意到DataTypeAttribute类是从System.ComponentModel.DataAnnotations.ValidationAttribute继承的。
就ASP.NET MVC DefaultModelBinder类而言,DataTypeAttribute是一个验证属性吗?在简单的英语中,ModelBinder是否根据DataTypeAttribute验证对象?
例如,如果我将DataType属性指定为DataType.EmailAddress,它将验证电子邮件地址还是该属性仅为对象提供元数据。
更新
我发现了一个类似的问题:
因此,根据这一点,它不是用作验证属性。那么,如果它不是一个验证属性,那么为什么要从System.ComponentModel.DataAnnotations.ValidationAttribute继承它呢?
发布于 2011-11-22 23:05:11
DataTypeAttribute本身不包含任何验证逻辑。
它从ValidationAttribute派生的原因是,您可以创建一个新的自定义数据类型类,它既是一个DataType,也是一个验证,所有这些都封装在一个。这是.NET不允许多重继承的一个不幸的副作用。
所以,是的,这是一个验证器..。默认情况下不进行验证。它在耐心地等着你做重活。:)
实际上,如果您查看MVC 3期货,您将看到我们利用它来创建新的自定义验证器,其中我们知道jQuery已经能够提供客户端验证逻辑,并且添加了镜像服务器端验证逻辑(并保留了模板化的DataType好处)。
发布于 2011-11-12 20:47:12
基于MVC3源代码,DataTypeAttribute的唯一用途是填充ModelMetadata.DataTypeName 属性 .And,该属性仅供EditorFor/DisplayFor模板生成使用。所以你是对的,这与验证无关。所以我不知道为什么它是从ValidationAttribute继承来的。也许框架作者保留了它以供将来使用。
https://stackoverflow.com/questions/8107252
复制相似问题