我正在尝试开发一个 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);
}