EnumDataType属性在ASP.NET MVC中有什么作用?

10
我曾在我的一些模型对象上使用字符串属性来表示枚举类型,因为 Entity Framework Code First 还没有对枚举类型提供支持。我注意到在 System.ComponentModel.DataAnnotations 中有一个叫做 EnumDataType 的属性,我尝试设置这个属性,但好像没有任何影响。
我应该提到,我的最终目标是在“创建”或“编辑”视图中为任何枚举类型显示适当的下拉列表。我想也许 EnumDataType 在自动装配的情况下会更容易实现这一点,但我不确定。
三个问题:
1. EnumDataType 在 ASP.NET MVC 中有什么作用吗? 2. 如果有的话,它是用来做什么的? 3. 我需要将我的模型属性设置为 int 类型(而不是 string),才能利用 EnumDataType 吗?
4个回答

9

EnumDataType目前只有在.NET 4.0的ASP.NET动态数据站点中受支持。您通常可以构建自己的自定义HTML帮助程序,该程序将获取属性并检查它是否包含该属性(通过反射),然后使用链接的枚举值创建下拉列表。


+1 谢谢。我在想我可能需要一个辅助方法。我是否需要为每个枚举类型编写一个辅助方法,还是可以编写一个通用的方法适用于任何枚举类型? - devuxer
我相信可以编写一个适用于所有枚举类型的单个方法,因为枚举类型将从属性中提取。 - Ladislav Mrnka

5
我发现的最好的解决方案是将这篇博客这个答案结合起来。这使得视图和模型都非常易读且易于维护。 查看我的完整回答
模型:
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)

0

MVC 3没有处理EnumDataTypeAttribute的逻辑。


0

无论是MVC3还是EF4.1 CodeFirst,都可以使用此属性验证属性。由于EF目前缺乏枚举支持,因此您可以将该属性放在整数属性上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接