ドロップダウンリストに表示列挙を使用するための便利な拡張方法があります。例えば、hereおよびhere。MVC3 EnumDropdownListの選択値
しかし、遭遇する1つの問題があります。つまり、列挙型がDescription属性で装飾されている場合、これらのヘルパーは機能しません。最初の例は、Description属性で完全に機能しますが、選択した値は設定されません。 2番目の例では、選択した値を設定しますが、description属性は使用しません。だから、私は両方のメソッドを正しく動作するヘルパーに結合する必要があります。私はそれを働かせるために多くのバリエーションを持っていますが、これまでの成功はありません。私は選択リストを作成するいくつかの方法を試しましたが、何とかSelectedプロパティを無視します。私のすべてのテストでは、Selectedプロパティは1つの項目でtrueに設定されていましたが、このプロパティは無視されます。 どのようなアイデアでも大歓迎です!
これは私が試した最新のコードです:
public static IEnumerable<SelectListItem> ToSelectList(Type enumType, string selectedItem)
{
List<SelectListItem> items = new List<SelectListItem>();
foreach (var item in Enum.GetValues(enumType))
{
FieldInfo fi = enumType.GetField(item.ToString());
var attribute = fi.GetCustomAttributes(typeof(DescriptionAttribute), true).FirstOrDefault();
var title = attribute == null ? item.ToString() : ((DescriptionAttribute)attribute).Description;
var listItem = new SelectListItem
{
Value = ((int)item).ToString(),
Text = title,
Selected = selectedItem == item.ToString()
};
items.Add(listItem);
}
return items;
}
public static HtmlString EnumDropDownList2For<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> modelExpression)
{
var typeOfProperty = modelExpression.ReturnType;
if (!typeOfProperty.IsEnum)
throw new ArgumentException(string.Format("Type {0} is not an enum", typeOfProperty));
var value = htmlHelper.ViewData.Model == null
? default(TProperty)
: modelExpression.Compile()(htmlHelper.ViewData.Model);
return htmlHelper.DropDownListFor(modelExpression, ToSelectList(modelExpression.ReturnType, value.ToString()));
}
jsut詳細情報:http://coding-in.net/asp-net-mvc-3-method-extension/ – mbowles