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

Другие вопросы по тегам