2012-02-29 79 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