【问题标题】:How To display user Friendly name from Enum in DropDownList in MVC View?如何在 MVC 视图的 DropDownList 中显示来自枚举的用户友好名称?
【发布时间】:2015-05-29 08:57:35
【问题描述】:

目前在我的 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>

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 drop-down-menu enums


【解决方案1】:

您必须首先为 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 扩展方法添加到您现有的扩展方法类或创建一个名为 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;
   }
}

现在在您的视图中使用扩展方法将枚举字段作为 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 )

【讨论】:

    【解决方案2】:

    从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2012-03-08
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多