使用枚举友好名称
本文关键字:枚举 | 更新日期: 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()