使用枚举友好名称

本文关键字:枚举 | 更新日期: 2023-09-27 18:27:07

我正在尝试在用户友好可读的名称中使用enum但我不知道如何将其绑定到我的视图的

这就是我目前所拥有的:

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名称绑定到我的视图?

使用枚举友好名称

您可以在模型上创建一个只读属性,从中返回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!!";
         }
     }
}

最好不要在readonly属性的主体中实现开关,而是为其创建一个扩展方法?所以你的身体会是这样的:

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

和扩展方法:

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

扩展方法的好处是,您可以释放readonly属性,并从剃刀视图直接绑定到扩展方法(在剃刀视图中输入正确的"using",这样才能工作)。

你可以试着这样做:

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()