private static SelectList ToSelectList(Type enumType, string selectedItem)
{
var items = new List<SelectListItem>();
foreach (var item in Enum.GetValues(enumType))
{
var title = ((Enum)item).GetDescription();
var listItem = new SelectListItem
{
Value = ((int)item).ToString(),
Text = title,
Selected = selectedItem == item.ToString()
};
items.Add(listItem);
}
return new SelectList(items, "Value", "Text");
}
第二种方法是创建helper方法
public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression, string optionLabel, object htmlAttributes)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
Type enumType = GetNonNullableModelType(metadata);
IEnumerable<TEnum> values = Enum.GetValues(enumType).Cast<TEnum>();
IEnumerable<SelectListItem> items = from value in values
select new SelectListItem
{
Text = GetEnumDescription(value),
Value = value.ToString(),
Selected = value.Equals(metadata.Model)
};
// If the enum is nullable, add an 'empty' item to the collection
if (metadata.IsNullableValueType)
{
items = SingleEmptyItem.Concat(items);
}
return htmlHelper.DropDownListFor(expression, items, optionLabel, htmlAttributes);
}
public static string GetEnumDescription<TEnum>(TEnum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if ((attributes != null) && (attributes.Length > 0))
{
return attributes[0].Description;
}
return value.ToString();
}
public class AddressModel
{
public enum OverrideCode
{
N,
Y,
}
public List<SelectListItem> OverrideCodeChoices { get {
return SelectListGenerator.GetEnumsByType<OverrideCode>();
} }
}
4条答案
按热度按时间r6l8ljro1#
你可以这样绑
字符串
如果还想获取选定值,请执行下列操作
ca1c2owp2#
有几种方法可以做到这一点。
一种方法是创建一个返回选择列表的方法。
第二种方法是创建helper方法
neskvpey3#
我使用了多种方法的组合。首先,这里有一个扩展方法,用于Enums从枚举类型中获取集合中的所有枚举项:
然后,我有一些代码可以将List转换为List,你可以指出你传入的值中哪些是已经选中的(对于Dropdown列表只有1个,但是你也可以用它来支持CheckBoxList),如果需要的话,也可以指出要排除的值。
然后在我的视图模型中,当我需要填充一个DropdownList时,我可以从helper方法中获取List,如下所示:
sf6xfgos4#
有点晚了,但你可以只使用Html助手: