【问题标题】:Working with enums in ASP.NET MVC 3在 ASP.NET MVC 3 中使用枚举
【发布时间】:2011-09-02 06:57:20
【问题描述】:

是否有一种聪明的方法可以让 MVC 脚手架为枚举值的模型属性呈现下拉列表或列表框?

例子:

public class MyModel
{
    public Color MyColor { get; set; }
    public Option Options { get; set; }
}

public enum Color
{ 
    None = 0,
    Red = 1,
    Blue = 2, 
    White = 3
}

[Flags]
public enum Option
{ 
    NotSet = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}

对于“颜色”属性,下拉菜单会很好。对于“选项”属性,组合框或复选框列表会很酷。

MVC 框架/工具中是否为此提供了任何类型的支持?目前,当我从模型创建视图时,Visual Studio 只会忽略枚举类型的模型属性。

实现这一点的最佳方法是什么?

【问题讨论】:

    标签: c# asp.net-mvc visual-studio-2010 enums scaffolding


    【解决方案1】:

    辅助方法

    Dropdownlist for Enum

    我已经在自己的项目中成功地利用了这一点。

    public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression)
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        Type enumType = GetNonNullableModelType(metadata);
        IEnumerable<TEnum> values = Enum.GetValues(enumType).Cast<TEnum>();
    
        TypeConverter converter = TypeDescriptor.GetConverter(enumType);
    
        IEnumerable<SelectListItem> items =
            from value in values
            select new SelectListItem
                       {
                           Text = converter.ConvertToString(value), 
                           Value = value.ToString(), 
                           Selected = value.Equals(metadata.Model)
                       };
    
        if (metadata.IsNullableValueType)
        {
            items = SingleEmptyItem.Concat(items);
        }
    
        return htmlHelper.DropDownListFor(
            expression,
            items
            );
    }
    

    【讨论】:

      【解决方案2】:

      这里有很好的解决方案:How do you create a dropdownlist from an enum in ASP.NET MVC?

      这显然是用于下拉菜单,但对于您想要的其他 UI 选项,您可以使用值的集合通过循环创建它们。

      不是内置的,但很容易做到。

      【讨论】:

        猜你喜欢
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多