2015-05-29 62 views
1

当前在我的mvc视图显示在DropDownList中的枚举值,但名称“Brittish_Airways”不看用户友好,试图取代在我看来“Brittish_Airways”insted“布里特航空公司”,如何做到这一点?如何在MVC视图中的DropDownList中的Enum中显示用户友好名称?

显示特殊字符/符号空间在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> 
+0

检查我的文章,我在我的情况下所做的:HTTP://developmentpassion.blogspot.com/2015/03/binding-enum-with-dropdownlist-in.html –

回答

2

你必须首先创建枚举属性,该属性将用于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 
} 

现在对于枚举添加下面的扩展方法来现有的扩展方法的类或创建一个新的名为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)

相关问题