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) 
相关问题