Я хочу использовать DisplayAttribute
с Name
.Создайте собственный атрибут отображения, используя или наследующий DisplayAttribute в ASP.NET MVC
Проблема в том, что класс sealed
, и я не могу наследовать его, чтобы переопределить некоторые методы.
Почему я хочу этого?
Я хочу передать некоторый код, чтобы перевести строки в Name
. И добавьте одно свойство для языка.
Что-то вроде:
[MyDisplay(Code = TRANSLATION_CODE, Language = "FR-FR")]
public string Fr { get; set; }
А внутри MyDisplayAttribute, я хочу сделать так:
public class MyDisplayAttribute: DisplayAttribute // it won't work the inherits
{
public int Code { get; set; }
public string Language { get; set; }
// somewhere, I don't know what method
// I want to assing `Name = GetTranslation(Code, Language);`
}
Существует еще один способ сделать это?
UPDATE
Я попытался также это:
public class MyDisplayAttribute : DisplayNameAttribute
{
private int _code;
private string _language;
public MyDisplayAttribute(int code, string language)
: base(language)
{
_code = code;
_language = language;
}
public override string DisplayName
{
get
{
// here come LanguageTranslatorManager
if (_code == 1 && _language == "en") {
return "test";
}
return base.DisplayName;
}
}
}
и в модели:
[MyDisplay(1, "en")]
public string Test
{
get;
set;
}
Я ожидал, чтобы отобразить test
в представлении, но Безразлично» t! Где моя ошибка?
Он не перезаписывает функциональность 'DisplayNameAttribute'. Он возвращает ожидаемое значение, но не привязывает его к метаданным. Вам нужно явно переопределить значение в метаданных модели. –
Поскольку ваш вопрос 2 года назад, вы нашли решение? –
@ChristianGollhardt: К сожалению, нет, я создал свой собственный атрибут, потому что DisplayNameAttribute запечатан и не может быть унаследован. –