2012-02-29 67 views
3

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

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

我还假设它也会验证它,因为我使用了DataType.Url,但它会通过是否输入Url来判断。与DataType.Email一样。有什么我做错了,或者我需要使用正则表达式吗?

+0

您想使用RegEx做什么? – gideon 2012-02-29 03:40:12

回答

7

见我的MSDN文章DataType Enumeration 这些都不是验证属性。从MSDN文章:

DataTypeAttribute属性允许您通过使用比数据库内部类型更具体的类型 来标记字段。例如, 包含电子邮件地址的字符串数据字段可以归类为 和EmailAddress类型。该信息可以通过 字段模板进行访问,并修改数据字段的处理方式。 (即 创建一个链接)

+0

好吧,出于某种原因,我认为他们可以验证。我明白你现在的电子邮件地址链接是什么意思,什么都没有意义。谢谢你清理那个。 – 2012-03-02 14:11:03

+1

现在看来,他们是验证属性。至少在MVC 4中,DataTypeAttribute派生自ValidationAttribute。 – fejesjoco 2013-12-12 14:00:13

4

DataType属性在ASP.NET MVC的上下文中使用什么视图模板渲染该属性显示和编辑或多或少的暗示。正如您已经注意到的,它提供了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。

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

0

尽管从ValidationAttribute继承,但DataTypeAttribute不验证任何内容。它覆盖了IsValid()方法,但总是返回true

如果你想验证EmailUrl字段中,使用EmailAttributeUrlAttribute代替。这些从DataTypeAttribute继承并适当地覆盖IsValid()方法。

这是特定数据类型的整个列表属性:

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