mvc DisplayName или Display(Name=) в зависимости от другого свойства модели

У меня есть модель, которая имеет строковое свойство и свойство перечисления.

Я хочу, чтобы метка, поэтому DisplayName отличалась в зависимости от значения свойства перечисления, например.

public class DisplayItRight
{
    public TypeEnum Type { get; set; }

    DisplayName(Type == TypeEnum.Apple ? "Good" : "Bad")
    public string GotIt { get; set;}
}

Есть ли способ сделать это?


person nickornotto    schedule 07.01.2016    source источник
comment
вы можете проверить мой ответ ниже. возможно, ваш собственный атрибут может решить проблему. Была бы возможность расширить DisplayName только потому, что Display запечатан   -  person Boris Sokolov    schedule 07.01.2016


Ответы (1)


Похоже, этот код будет работать только для const Type:

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.

person Boris Sokolov    schedule 07.01.2016