Asp.net mvc SelectListItem的Selected属性和SelectItem的selectedValue参数不工作
我正在尝试开发一个HtmlHelper扩展方法:EnumDropDownListFor。无论我做了什么,我都无法显示所选的值。我尝试设置SelectListItem的Selected=true属性和SelectList构造函数的selectedValue。在调试时(在返回行),我可以看到SelectLİstItem的Selected=true,这两种情况下都应该选择SelectLİstItem。但当我“查看源”时,没有一个选项选择了=“selected”属性 我哪里做错了 注意:Toolkit是我的实用程序类,ToByte是Enum的扩展方法Asp.net mvc SelectListItem的Selected属性和SelectItem的selectedValue参数不工作,asp.net-mvc,enums,html-helper,selectlist,Asp.net Mvc,Enums,Html Helper,Selectlist,我正在尝试开发一个HtmlHelper扩展方法:EnumDropDownListFor。无论我做了什么,我都无法显示所选的值。我尝试设置SelectListItem的Selected=true属性和SelectList构造函数的selectedValue。在调试时(在返回行),我可以看到SelectLİstItem的Selected=true,这两种情况下都应该选择SelectLİstItem。但当我“查看源”时,没有一个选项选择了=“selected”属性 我哪里做错了 注意:Toolkit是
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);
}
public static MvcHtmlString EnumDropDownListFor(
此HtmlHelper助手,表达式,字符串optionLabel=null,
对象htmlAttributes=null),其中TModel:class
{
var selectedValue=helper.ViewData.Model==null
?默认值(t属性)
:expression.Compile()(helper.ViewData.Model);
var enumVals=Toolkit.GetEnumValues(typeof(TProperty));
//var selectList=来自enumVals.OfType()中的enumVal
//选择新的SelectListItem
// {
//Text=enumVal.GetName(),
//Value=enumVal.ToByte().ToString(),
//Selected=Equals(enumVal,Toolkit.To(selectedValue))
// };
//ViewData[(expression.Body作为MemberExpression.Member.Name]=Toolkit.To(selectedValue.ToByte().ToString();
var selectList=new selectList(来自enumVals.OfType()中的enumVal)
选择新的
{
TextField=enumVal.GetName(),
ValueField=enumVal.ToByte().ToString()
},ValueField,TextField,Toolkit.To(selectedValue.ToByte().ToString());
return helper.DropDownListFor(表达式、selectList、optionLabel、htmlAttributes);
}
我解决了它(:
这是因为我使用返回枚举类型的同一表达式调用“helper.DropDownListFor”,并且我试图通过“Byte”设置选项的值铸造的值。因此,表达式的返回值似乎覆盖了给定的选定值,这很有意义。您能告诉我您是如何解决这个问题的吗?我目前面临着同样的问题。您如何解决这个问题?