目前在我的mvc View中显示DropDownList中的枚举值,但名称" Brittish_Airways"不看起来用户友好,试图取代" Brittish Airways"在" Brittish_Airways"在我看来,如何做到这一点?
在枚举列表
中显示特殊字符/符号空格我的枚举: -
public enum EventType
{
Other = 0,
Birth = 1,
Marriage = 2,
Death = 3,
Brittish_Airways=4
}
我的参考代码: - >
<li>
@Html.DropDownListFor(model => model.EventTypeText,
Enum.GetNames(typeof(ABC.Web.EventType))
.Select(e =>
new SelectListItem { Text = e
}),
new { @class = "ddlEventType ddl" })
</li>
答案 0 :(得分:2)
您必须首先为Enum创建属性,该属性将在Enum字段上用于设置用户友好的显示名称:
public class EnumDisplayNameAttribute : Attribute
{
private string _displayName;
public string DisplayName
{
get { return _displayName; }
set { _displayName = value; }
}
}
然后你必须在你的枚举字段上装饰属性,如下所示:
public enum EventType
{
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Other = 0,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Birth = 1,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Marriage = 2,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Death = 3,
[EnumDisplayName(DisplayName="Some User Friendly Name")]
Brittish_Airways=4
}
现在将Enum的以下扩展方法添加到现有的Extension Methods类中,或者创建一个名为EnumExtensions的新方法:
public static class ExtensionMethods
{
public static System.Web.Mvc.SelectList ToSelectList<TEnum>(this TEnum obj)
where TEnum : struct, IComparable, IFormattable, IConvertible // correct one
{
return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>()
.Select(x =>
new SelectListItem
{
Text = x.DisplayName(),
Value = (Convert.ToInt32(x)).ToString()
}), "Value", "Text");
}
public static string DisplayName(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
EnumDisplayNameAttribute attribute
= Attribute.GetCustomAttribute(field, typeof(EnumDisplayNameAttribute))
as EnumDisplayNameAttribute;
return attribute == null ? value.ToString() : attribute.DisplayName;
}
}
现在在您的视图中使用扩展方法将Enum字段作为SelectList返回,其用户友好名称为选项文本:
@using YourNamespace.ExtensionMethods;
@Html.DropDownListFor(model => model.EventTypeText,
EventType.Other.ToSelectList()),
new { @class = "ddlEventType ddl" })
您还可以查看my article (Binding Enum with DropdownList in asp.net mvc )
答案 1 :(得分:0)
从MVC 5.1及更高版本开始,他们添加了此新帮助器。您只需要一个枚举
public enum Month
{
[Display(Name = "January")]
jan,
[Display(Name = "February")]
feb
}
在枚举中[Description(“ ...”)也可用,但是在将其与EnumDropDownListFor结合使用之前,请先进行读取/研究(我仅使用Display(Name))。
然后
您可以通过编写以下内容来创建显示名称的EnumDropDownlist:
@Html.EnumDropDownListFor(model => model.Month, null, new { @id = "ddlMonth", @class = "form-control", @style = "width:200px;" })
shareeditflag