1. ホーム
  2. c#

[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?

2022-03-14 21:19:41

質問内容

を使おうとしているのですが Html.DropDownList の拡張メソッドですが、列挙型でどのように使用するのかがわかりません。

例えば、こんな列挙があるとします。

public enum ItemTypes
{
    Movie = 1,
    Game = 2,
    Book = 3
}

これらの値でドロップダウンを作成するには Html.DropDownList という拡張メソッドがあります。

それとも、単純にforループを作って手動でHtml要素を作成するのが一番良い方法でしょうか?

どのように解決するのですか?

MVC v5.1では、Html.EnumDropDownListForを使用します。

@Html.EnumDropDownListFor(
    x => x.YourEnumField,
    "Select My Type", 
    new { @class = "form-control" })


MVC v5ではEnumHelperを使用します。

@Html.DropDownList("MyType", 
   EnumHelper.GetSelectList(typeof(MyType)) , 
   "Select My Type", 
   new { @class = "form-control" })


MVC 5以下用

Runeさんの回答を拡張メソッドに転用してみました。

namespace MyApp.Common
{
    public static class MyExtensions{
        public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
            where TEnum : struct, IComparable, IFormattable, IConvertible
        {
            var values = from TEnum e in Enum.GetValues(typeof(TEnum))
                select new { Id = e, Name = e.ToString() };
            return new SelectList(values, "Id", "Name", enumObj);
        }
    }
}

これにより、書き込みができるようになります。

ViewData["taskStatus"] = task.Status.ToSelectList();

によって using MyApp.Common