2014-10-19 99 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()