C# mvc DisplayName或Display(Name=…)取决于另一个模型属性
我有一个模型,它有一个字符串属性和一个枚举属性 我想要标签,因此DisplayName根据枚举属性值(例如)的不同而不同C# mvc DisplayName或Display(Name=…)取决于另一个模型属性,c#,asp.net-mvc,data-annotations,displayname-attribute,C#,Asp.net Mvc,Data Annotations,Displayname Attribute,我有一个模型,它有一个字符串属性和一个枚举属性 我想要标签,因此DisplayName根据枚举属性值(例如)的不同而不同 public class DisplayItRight { public TypeEnum Type { get; set; } DisplayName(Type == TypeEnum.Apple ? "Good" : "Bad") public string GotIt { get; set;} } 有什么办法吗?看起来此代码仅适用于常量类型:
public class DisplayItRight
{
public TypeEnum Type { get; set; }
DisplayName(Type == TypeEnum.Apple ? "Good" : "Bad")
public string GotIt { get; set;}
}
有什么办法吗?看起来此代码仅适用于常量类型:
public enum MyEnum
{
First,
Second
}
public class LoginViewModel
{
const MyEnum En = MyEnum.First;
[Required]
[DataType(DataType.Password)]
[Display(Name = (En == MyEnum.First ? "Password" : "aaa"))]
public string Password { get; set; }
}
您自己的DisplayName实现应该有第二个选项:
public enum MyEnum
{
First,
Second
}
public MyDisplayNameAttribute : DisplayNameAttribute
{
public MyDisplayNameAttribute (MyEnum en, string text1, string text2) : base (CorrectName (en, text1, text2))
{}
public static string CorrectName (MyEnum en, string text1, string text2)
{
return en == MyEnum.First ? text1 : text2;
}
}
public class LoginViewModel
{
const MyEnum En = MyEnum.First;
[Required]
[DataType(DataType.Password)]
[MyDisplayName(MyEnum.Second, "password1", "password2")]
public string Password { get; set; }
}
但是,我不认为这两种解决方案都比在ViewModel中添加某种标签要好您可以在下面查看我的答案。也许你自己的属性可以解决这个问题。只有因为显示器是密封的,才有可能扩展DisplayName