HtmlHelper 拡張メソッドを開発しようとしています: EnumDropDownListFor. 何をしても、選択した値を表示できませんでした。SelectListItem の Selected=true プロパティを設定し、SelectList コンストラクターの selectedValue を設定してみました。デバッグ中 (戻り行)、どちらの場合も、選択されているはずの SelectLİstItem で Selected=true が表示されます。しかし、「ソースを表示」すると、どのオプションもselected="selected"属性を持っていません。
どこが間違っていますか?
注: Toolkit は私のユーティリティ クラスで、ToByte は Enum の拡張メソッドです。
public static MvcHtmlString EnumDropDownListFor<TModel, TProperty>(
this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string optionLabel = null,
object htmlAttributes = null) where TModel : class
{
var selectedValue = helper.ViewData.Model == null
? default(TProperty)
: expression.Compile()(helper.ViewData.Model);
var enumVals = Toolkit.GetEnumValues(typeof(TProperty));
//var selectList = from enumVal in enumVals.OfType<Enum>()
// select new SelectListItem
// {
// Text = enumVal.GetName(),
// Value = enumVal.ToByte().ToString(),
// Selected = Equals(enumVal, Toolkit.To<Enum>(selectedValue))
// };
// helper.ViewData[(expression.Body as MemberExpression).Member.Name] = Toolkit.To<Enum>(selectedValue).ToByte().ToString();
var selectList = new SelectList(from enumVal in enumVals.OfType<Enum>()
select new
{
TextField = enumVal.GetName(),
ValueField = enumVal.ToByte().ToString()
}, "ValueField", "TextField", Toolkit.To<Enum>(selectedValue).ToByte().ToString());
return helper.DropDownListFor(expression, selectList, optionLabel, htmlAttributes);
}