2014-10-19 167 views
0

我想在一個用戶友好的可讀名稱 使用枚舉,但我不能找出如何將其綁定到我的視圖的枚舉友好名稱

這是我到目前爲止有:

public enum MyDayOfWeek 
{ 
    Sunday = 0, 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 3, 
    Thursday = 4, 
    Friday = 5, 
    Saturday = 6, 
    SunTilFir = 7, 

} 

public class Course 
{ 
    public int CourseId { get; set; } 
    public string CourseName { get; set; } 
    public int Hour { get; set; } 
    public MyDayOfWeek Days { get; set; } 
} 

public static class ChangeEnumName 
{ 
    public static string EnumValue(this MyDayOfWeek e) 
    { 
     switch (e) 
     { 
      case MyDayOfWeek.SunTilFir: 
       return "Sunday until Friday "; 
     } 
     return "Horrible Failure!!"; 
    } 
} 

如何將ChangeEnum名稱綁定到我的視圖?

+0

它看起來像你想創建一個擴展方法爲枚舉類型。我不認爲這在C#中是有效的。 – 2014-10-19 13:24:59

+0

這是幹什麼的?使用友好名稱與枚舉? – Danny 2014-10-19 13:27:29

+1

使用位值並創建一個值'Weekdays',可以寫成'Monday |星期二|星期三|星期四|星期五「或」星期六〜星期日「?雖然我不能說我確定你想要做的是什麼。 – 2014-10-19 13:27:43

回答

2

你可以做的是讓您從中恢復您的FriendlyName

public class Course 
{ 
    public int CourseId { get; set; } 
    public string CourseName { get; set; } 
    public int Hour { get; set; } 
    public MyDayOfWeek Days { get; set; } 

    public string DaysFriendlyName 
    { 
     get 
     { 
       switch(this.Days) 
       { 
        case MyDayOfWeek.SunTilFir: 
         return "Sunday until Friday "; 
       } 
       return "Horrible Failure!!"; 
     } 
    } 
} 

大概連最好不要實施您的只讀屬性的身體的開關,但也許做一個擴展模型上的只讀屬性方法呢?所以,你的身體會是這樣的:

public string DaysFriendlyName 
{ 
    get 
    { 
     return this.Days.ToFriendlyName(); 
    } 
} 

和擴展方法:

namespace UniPro.Models 
{  
    public static class DaysEnumExtensions 
    { 
     public static string ToFriendlyName(this MyDayOfWeek days) 
     { 
       switch (days) 
       { 
       //.... 
       } 
     } 
    } 
} 

擴展方法的好的部分是,你可以失去的只讀屬性,並直接綁定到擴展方法從你的剃鬚刀視圖(在剃鬚刀視圖中輸入正確的「使用」以使其工作)。

+0

什麼名稱空間我應該使用「@Using」嗎? – Danny 2014-10-19 13:57:36

+0

只需添加'DaysEnumExtensions'類的使用。請注意,擴展方法不能用於像DisplayFor <>這樣的控制模板。在這種情況下,您將需要只讀屬性 – 2014-10-19 14:20:35

+0

@using UniPro.Models.DaysEnumExtensions我得到此錯誤:使用命名空間指令只能應用於命名空間; 'UniPro.Models.DaysEnumExtensions'是一個不是命名空間的類型 – Danny 2014-10-19 14:28:33

1

你可以嘗試做這樣的:

public enum MyDayOfWeek 
{ 
    [UserFriendlyName("Sunday")] 
    Sunday = 0, 

    [UserFriendlyName("Monday")] 
    Monday = 1, 

    [UserFriendlyName("Tuesday")] 
    Tuesday = 2, 

    [UserFriendlyName("Wednesday")] 
    Wednesday = 3, 

    [UserFriendlyName("Thursday")] 
    Thursday = 4, 

    [UserFriendlyName("Friday")] 
    Friday = 5, 

    [UserFriendlyName("Saturday")] 
    Saturday = 6, 

    [UserFriendlyName("Sunday until Friday")] 
    SunTilFir = 7 
} 

public class UserFriendlyNameAttribute : Attribute 
{ 
    public string Text { get; set; } 

    public UserFriendlyNameAttribute(string text) 
    { 
     Text = text; 
    } 
} 

public static class EnumExtensions 
{ 
    public static string GetUserFriendlyName(this MyDayOfWeek myDayOfWeek) 
    { 
     return GetUserFriendlyNameAttributeText(typeof(MyDayOfWeek), myDayOfWeek.ToString()); 
    } 

    private static string GetUserFriendlyNameAttributeText(this Type type, string memberName) 
    { 
     var memInfo = type.GetMember(memberName); 
     if (memInfo.Length == 0) 
      return string.Empty; 

     var attributes = memInfo[0].GetCustomAttributes(typeof(UserFriendlyNameAttribute), false); 
     if (attributes.Length == 0) 
      return null; 

     return ((UserFriendlyNameAttribute) attributes[0]).Text; 
    } 
} 

所以,你可以用它在一個視圖擴展方法:

MyDayOfWeek.SunTilFir.GetUserFriendlyName()