public static MvcHtmlString EnumDropDownListFor<TModel, TProperty, TEnum>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
TEnum selectedValue)
{
IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum))
.Cast<TEnum>();
IEnumerable<SelectListItem> items = from value in values
select new SelectListItem()
{
Text = value.ToString(),
Value = value.ToString(),
Selected = (value.Equals(selectedValue))
};
return SelectExtensions.DropDownListFor(htmlHelper,expression, items);
}
现在,上面的代码不是我的。它来自here,效果很好。您可以在视图中使用此功能,只需在Web.config
Views
文件夹下的value
中添加名称空间即可。但有一点我无法解决。 Text
给我的public enum OrderType
{
Foo = 1,
Bar = 2
}
是View
而不是数字。说,
@Html.EnumDropDownListFor(model => model.OrderTypeId, Model.OrderType as IEnumerable<SelectListItem>())
然后在<option value="Foo">Foo</option>
<option value="Bar">Bar</option>
<option value="1">Foo</option>
<option value="2">Bar</option>
这给了我:
{{1}}
我想要这个:
{{1}}
更新 在我提供给代码来自的链接中。它提供两种选择。真正有效的第一个。给我数值而第二个(我的问题中的代码)不给我数值(但仍然有效)。一直在寻找如何调整2号选项的方法,因为我觉得它更清洁。
应该怎样做才能达到这样的效果?非常感谢。
答案 0 :(得分:1)
public static MvcHtmlString EnumDropDownListFor<TModel, TProperty, TEnum>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
TEnum selectedValue)
where TEnum : struct, IConvertible
{
var values = Enum.GetValues(typeof (TEnum))
.Cast<TEnum>().ToArray();
var items = values
.Select(x => new
{
Text = x.ToString(CultureInfo.InvariantCulture),
Value = Convert.ChangeType(x, x.GetTypeCode()),
Selected = (x.Equals(selectedValue))
})
.Select(x => new SelectListItem
{
Text = x.Text,
Value = x.Value == null
? ""
: x.Value.ToString(),
Selected = x.Selected
});
return htmlHelper.DropDownListFor(expression, items);
}
答案 1 :(得分:0)
我认为您应该使用@Html.EnumDropDownListFor
代替@Html.DropdownListFor
。
答案 2 :(得分:0)
public static MvcHtmlString EnumDropDownListFor<TModel, TProperty, TEnum>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
TEnum selectedValue)
{
IEnumerable<TEnum> values = Enum.GetValues(typeof(TEnum))
.Cast<TEnum>();
IEnumerable<SelectListItem> items = from value in values
select new SelectListItem()
{
Text = value.ToString(),
Value = (int)value,
Selected = (value.Equals(selectedValue))
};
return SelectExtensions.DropDownListFor(htmlHelper,expression, items);
}