我有这个方法从Enum构建DropDownList。 SelectListItems正确显示,但Select属性不起作用。我逐步构建此代码,并且项集合具有正确的选定项目的正确值,但DropDownListFor不返回正确的html。我在SO上找到了这个问题,人们遇到了我的问题:他们在ViewBag中使用相同的名称,并在Mode; l属性中使用,但我有任何ViewBag元素。我究竟做错了什么?
public static MvcHtmlString EnumDropDownListFor<TModel, TProperty, TEnum>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
TEnum selectedValue, object htmlAttributes)
{
IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
List<SelectListItem> items = new List<SelectListItem>();
foreach (TEnum e in values)
{
var type = typeof(TEnum);
var memInfo = type.GetMember(e.ToString());
var attributes = memInfo[0].GetCustomAttributes(typeof(DisplayAttribute), false);
var name = ((DisplayAttribute)attributes[0]).Name;
int selected = Convert.ToInt32(selectedValue);
int cur = Convert.ToInt32(e);
SelectListItem item = new SelectListItem();
item.Text = name;
item.Value = Convert.ToInt32(e).ToString();
item.Selected = cur == selected;
items.Add(item);
}
return SelectExtensions.DropDownListFor(htmlHelper, expression, items, htmlAttributes);
}