使用ViewData和视图代码列出下拉列表中的枚举值?

时间:2013-06-18 09:06:33

标签: c# asp.net-mvc asp.net-mvc-4

如何使用ASP.NET MVC 4中的枚举值创建下拉列表?

我有一个Language枚举:

public enum Language 
{
    English = 0,
    spanish = 2,
    Arabi = 3
}

我的财产是:

public Language Language { get; set; }

我的Controller操作如下所示:

[HttpPost]
public ActionResult Edit(tList tableSheet)
{         
    return RedirectToAction("Index");
}

如何使用ViewData[]通过下拉列表调用我的视图?

2 个答案:

答案 0 :(得分:2)

这将返回

Enum.GetNames(typeOf(Language ))


English
spanish
Arabi

这个

Enum.GetValues(typeOf(Language ))


1,2,3

您可以查看语言列表:

ViewBeg.Languages = Enum.GetNames(typeOf(Language)).ToList();

答案 1 :(得分:1)

我知道我迟到了,但是...看看我创建的助手课程就是这样......

http://jnye.co/Posts/4/creating-a-dropdown-list-from-an-enum-in-mvc-and-c%23

此helpe可按如下方式使用:

在控制器中:

//If you don't have an enum value use the type
ViewBag.DropDownList = EnumHelper.SelectListFor<Language>();

//If you do have an enum value use the value (the value will be marked as selected)
ViewBag.DropDownList = EnumHelper.SelectListFor(myEnumValue);

在视图中

@Html.DropDownList("DropDownList")  

<强>助手:

public static class EnumHelper
{
    //Creates a SelectList for a nullable enum value
    public static SelectList SelectListFor<T>(T? selected)
        where T : struct
    {
        return selected == null ? SelectListFor<T>()
                                : SelectListFor(selected.Value);
    }

    //Creates a SelectList for an enum type
    public static SelectList SelectListFor<T>() where T : struct
    {
        Type t = typeof (T);
        if (t.IsEnum)
        {
            var values = Enum.GetValues(typeof(T)).Cast<enum>()
                             .Select(e => new { Id = Convert.ToInt32(e), Name = e.GetDescription() });

            return new SelectList(values, "Id", "Name");
        }
        return null;
    }

    //Creates a SelectList for an enum value
    public static SelectList SelectListFor<T>(T selected) where T : struct 
    {
        Type t = typeof(T);
        if (t.IsEnum)
        {
            var values = Enum.GetValues(t).Cast<Enum>()
                             .Select(e => new { Id = Convert.ToInt32(e), Name = e.GetDescription() });

            return new SelectList(values, "Id", "Name", Convert.ToInt32(selected));
        }
        return null;
    } 

    // Get the value of the description attribute if the 
    // enum has one, otherwise use the value.
    public static string GetDescription<TEnum>(this TEnum value)
    {
        FieldInfo fi = value.GetType().GetField(value.ToString());

        if (fi != null)
        {
            DescriptionAttribute[] attributes =
             (DescriptionAttribute[])fi.GetCustomAttributes(
    typeof(DescriptionAttribute),
    false);

            if (attributes.Length > 0)
            {
                 return attributes[0].Description;
            }
        }

        return value.ToString();
    }
}