2015-05-29 36 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)

相關問題