数据类型DataAnnotation

时间:2012-02-29 01:30:05

标签: asp.net-mvc data-annotations

我正在MSDN上阅读此内容并没有真正描述太多。它表示它用于指定与数据列或参数关联的数据类型。说得通。这是否意味着我应该在我的所有属性上使用它?我假设没有。那么为什么有一个DataType.Text,当你将一个属性作为字符串时似乎没用。

我发现它使用多行文本作为数据类型来在客户端创建textarea而不是仅使用单行文本输入元素。但这与数据列或参数有何关系?

我还假设它也会验证它,因为我使用了DataType.Url,但无论是否输入了Url,它都会通过。与DataType.Email相同。有什么我做错了或者我需要使用RegEx吗?

4 个答案:

答案 0 :(得分:8)

请参阅我的MSDN文章DataType Enumeration 这些不是验证属性。来自MSDN文章:

  

DataTypeAttribute属性允许您使用类型标记字段   这比数据库内在类型更具体。例如,   可以归因于包含电子邮件地址的字符串数据字段   使用EmailAddress类型。这些信息可以通过   字段模板并修改数据字段的处理方式。 (那是,   创建一个链接)

答案 1 :(得分:5)

ASP.NET MVC上下文中的DataType属性或多或少暗示了用于呈现该属性的显示和编辑器的视图模板。您已经注意到它提供了一个受支持数据类型的枚举,ASP.NET MVC内部提供了编辑器和显示模板(MultilineText - > textarea html输入),但它也可以使用带有自定义类型名称的字符串参数。它所做的一切就是在相应地使用Editor / EditorFor或Display / DisplayFor时在Views/ControllerName/EditorTemplates/{DataTypeName}.cshtmlViews/ControllerName/DisplayTemplates/{DataTypeName}.cshtml中查找具有该名称(预定义或未预定义)的视图(它还将在视图中搜索/共享/...)。如果不合适,则使用内置的(如果可用)。

应用DataType属性的效果与应用UIHint属性的效果非常相似,但它更明确一些。例如,我会在价格上使用DataType.Currency,在自定义滑块ui控件模型属性上使用UIHint。

关于验证 - 内置模板提供了验证,但如果您要在自定义显示/编辑器模板中使用自定义数据类型,则必须自己提供。

答案 2 :(得分:1)

尽管来自DataTypeAttribute的继承,ValidationAttribute仍未验证任何内容。它会覆盖IsValid()方法,但始终只返回true

如果您要验证EmailUrl字段,请改用EmailAttributeUrlAttribute。这些都是从DataTypeAttribute继承并适当覆盖IsValid()方法。

这是特定DataType属性的完整列表:

  • CreditCardAttribute
  • EmailAddressAttribute
  • EnumDataTypeAttribute
  • FileExtensionsAttribute
  • PhoneAttribute
  • UrlAttribute

答案 3 :(得分:0)

不完全确定您的要求,但DataAnnotations帮助您根据业务需求标记属性(如电子邮件,电话号码等)

DataType Enumeration

成员

这是为了什么?

当您注释类并将它们用作MVC应用程序中的模型时。 asp.net-mvc将负责验证(即使在客户端使用javascript,如果你已经有了一切)

请参阅本教程的示例: http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-6