4

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

我有一个Language枚举:

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

我的财产是:

public Language Language { get; set; }

我的控制器动作如下所示:

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

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

4

2 回答 2

2

这将返回

Enum.GetNames(typeOf(Language ))


English
spanish
Arabi

和这个

Enum.GetValues(typeOf(Language ))


1,2,3

您可以语言列表查看:

ViewBeg.Languages = Enum.GetNames(typeOf(Language)).ToList();
于 2013-06-18T09:08:41.203 回答
1

我知道我参加聚会迟到了,但是...查看我为此创建的助手类...

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

该帮助可以按如下方式使用:

在控制器中:

//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();
    }
}
于 2013-07-05T08:37:03.253 回答