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 に答える