8

我一直在使用string屬性來表示一些模型對象來表示枚舉。我只使用字符串,因爲在Entity Framework Code First中還沒有枚舉支持。無論如何,我注意到System.ComponentModel.DataAnnotations中有一個屬性叫做EnumDataType。我試着設置這個屬性,但它似乎沒有影響任何東西。EnumDataType屬性在ASP.NET MVC中做了什麼?

我應該提到我的最終目標是在「創建」或「編輯」視圖中爲任何枚舉類型顯示適當的下拉列表。我想可能EnumDataType會在一個自動腳手架場景中使這更容易,但我不確定是這種情況。

三個問題:

  1. 是否EnumDataType在ASP.NET MVC目的?
  2. 如果是,它有什麼作用?
  3. 我是否需要我的模型屬性爲int(而不是string)才能利用EnumDataType

回答

8

EnumDataType目前僅支持ASP.NET動態數據站點(在.NET 4.0中)。您通常可以構建自己的自定義HTML助手,如果該屬性包含該屬性(通過反射)並使用鏈接枚舉中的值創建下拉屬性,則該屬性將被檢查。

+0

+1和感謝。我想我可能需要一個輔助方法。我是否需要每個枚舉類型的幫助器方法,還是可以編寫一個適用於任何枚舉類型的通用方法? – devuxer 2011-04-27 20:35:36

+0

我相信應該可以編寫適用於所有枚舉類型的單一方法,因爲枚舉類型將從屬性中提取。 – 2011-04-27 20:41:07

0

MVC 3沒有任何邏輯來處理EnumDataTypeAttribute

0

MVC3或EF4.1 CodeFirst似乎用此屬性驗證屬性。由於目前EF中缺乏枚舉支持,這意味着您可以將該屬性放在整數屬性中。

4

我發現的最佳解決方案是將this blogthis answer結合在一起。這使得視圖和模型非常易讀易維護。

請參閱我的full answer here

型號:

public enum YesPartialNoEnum 
{ 
    [Description("Yes definitely")] 
    Yes, 
    [Description("No way!")] 
    No 
} 

//........ 

[Display(Name = "The label for my dropdown list")] 
public virtual Nullable<YesPartialNoEnum> CuriousQuestion{ get; set; } 

//........ 

查看:

@Html.ValidationMessageFor(model => model.CuriousQuestion) 
相關問題