mvc DisplayName или Display(Name=...) в зависимости от свойства другой модели
У меня есть модель, которая имеет свойство строки и свойство enum.
Я хочу метку, поэтому DisplayName может отличаться в зависимости от значения свойства enum, например.
public class DisplayItRight
{
public TypeEnum Type { get; set; }
DisplayName(Type == TypeEnum.Apple ? "Good" : "Bad")
public string GotIt { get; set;}
}
Есть ли способ сделать это?
1 ответ
Решение
Похоже, этот код будет работать только для константного типа:
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