Asp.net mvc 如何在MVC视图的DropDownList中显示枚举中的用户友好名称?
目前在我的mvc视图中,在DropDownList中显示枚举值,但名称“Brittish_Airways”看起来不友好,试图替换我视图中的“Brittish_Airways”而不是“Brittish_Airways”,怎么办 在enumdropdowlist中显示特殊字符/符号空格 我的枚举:-Asp.net mvc 如何在MVC视图的DropDownList中显示枚举中的用户友好名称?,asp.net-mvc,asp.net-mvc-4,drop-down-menu,enums,Asp.net Mvc,Asp.net Mvc 4,Drop Down Menu,Enums,目前在我的mvc视图中,在DropDownList中显示枚举值,但名称“Brittish_Airways”看起来不友好,试图替换我视图中的“Brittish_Airways”而不是“Brittish_Airways”,怎么办 在enumdropdowlist中显示特殊字符/符号空格 我的枚举:- public enum EventType { Other = 0, Birth = 1, Marriage = 2, Death =
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>
@Html.DropDownListFor(model=>model.EventTypeText,
Enum.GetNames(typeof(ABC.Web.EventType))
.选择(e=>
新建SelectListItem{Text=e
}),
新的{@class=“ddlEventType ddl”})
您必须首先为枚举创建属性,该属性将在枚举字段上用于设置用户友好的显示名称:
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扩展方法添加到现有扩展方法类中,或创建一个名为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;
}
}
您也可以从MVC5.1及以上版本中检查,他们已经添加了这个新的帮助程序。你只需要一个枚举
public enum Month
{
[Display(Name = "January")]
jan,
[Display(Name = "February")]
feb
}
在enum中,也可以使用[Description(“…”),但在将其与EnumDropDownListFor一起使用之前,请务必阅读/研究它(我仅使用了Display(Name))
那么
您可以通过以下方式创建显示名称的EnumDropDownlist:
@Html.EnumDropDownListFor(model => model.Month, null, new { @id = "ddlMonth", @class = "form-control", @style = "width:200px;" })
shareeditflag
检查我的文章,就像我在我的案例中所做的那样:
@Html.EnumDropDownListFor(model => model.Month, null, new { @id = "ddlMonth", @class = "form-control", @style = "width:200px;" })
shareeditflag