Asp.net mvc 如何在MVC视图的DropDownList中显示枚举中的用户友好名称?

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 =

目前在我的mvc视图中,在DropDownList中显示枚举值,但名称“Brittish_Airways”看起来不友好,试图替换我视图中的“Brittish_Airways”而不是“Brittish_Airways”,怎么办

在enumdropdowlist中显示特殊字符/符号空格

我的枚举:-

 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