列挙型からドロップダウンリストを作成します。
public enum Level
{
Beginner = 1,
Intermediate = 2,
Expert = 3
}
これが私の内線です。
public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
var result = from TEnum e in values
select new { ID = (int)Enum.Parse(typeof(TEnum), e.ToString()), Name = e.ToString() };
var tempValue = new { ID = 0, Name = "-- Select --" };
return new SelectList(result, "Id", "Name", enumObj);
}
私が抱えている問題は、別のアイテムをIEnumerableに挿入することです。私はそれを行う方法を理解できませんでした。誰かが私のコードを変更して、先頭に「--select--」を挿入できますか?.
_IEnumerable<T>
_オブジェクトを変更することはできません。これは、要素を列挙するためのインターフェイスのみを提供します。ただし、.ToList()
を使用して_IEnumerable<T>
_を_List<T>
_に変換することはできます。
これがあなたが望むものであるかどうかはわかりません:
_public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
var result = from TEnum e in values
select new { ID = (int)Enum.Parse(typeof(TEnum), e.ToString()), Name = e.ToString() };
var tempValue = new { ID = 0, Name = "-- Select --" };
var list = result.ToList(); // Create mutable list
list.Insert(0, tempValue); // Add at beginning of list
return new SelectList(list, "Id", "Name", enumObj);
}
_
IEnumerableを変更することはできません。その名前が示すように、前方のみの列挙トラバーサルが可能です。
とはいえ、これはASP.NETMVCアプリケーションのようです。ドロップダウンで達成しようとしていること(デフォルト値を挿入)を達成する正しい方法は、次のようにDropDownForヘルパーの適切なオーバーロードを使用することです。
@Html.DropDownListFor(
x => x.SomeValue,
Model.SomeEnum.ToSelectList(),
"-- Select --"
)
これは明らかに、拡張メソッドが次のように単純であることを前提としています。
public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
var result =
from e in Enum.GetValues(typeof(TEnum)).Cast<TEnum>()
select new
{
Id = (int)Enum.Parse(typeof(TEnum), e.ToString()),
Name = e.ToString()
};
return new SelectList(result, "Id", "Name", enumObj);
}
これを試してみてください
public static SelectList ToSelectList<TEnum>( this TEnum enumObj )
{
var result = ( from TEnum e in Enum.GetValues( typeof( TEnum ) )
select new
{
ID = (int) Enum.Parse( typeof( TEnum ), e.ToString() ),
Name = e.ToString()
} ).ToList();
result.Insert( 0, new
{
ID = 0,
Name = "-- Select --"
} );
return new SelectList( result, "Id", "Name", enumObj );
}