我正在尝试开发一个HtmlHelper扩展方法:EnumDropDownListFor。无论我做了什么,我都无法显示所选的值。我尝试设置SelectListItem的Selected = true属性并设置SelectList构造函数的selectedValue。在调试时(在返回行),对于两种情况,我都可以看到SelectLİstItem的Selected = true,它应该是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);
}
答案 0 :(得分:0)
我解决了(: 这是因为我调用“helper.DropDownListFor”具有相同的表达式,它返回一个Enum类型,我试图通过“Byte”类型值设置选项的值。因此,似乎Expression的返回值会覆盖给定的选定值,这很有意义。