chcę korzystać z DisplayAttribute
Name
nieruchomości.Utwórz niestandardowy atrybut wyświetlacza za pomocą przycisków lub dziedziczy DisplayAttribute w ASP.NET MVC
Problemem jest to, że klasa jest sealed
i nie mogę go zastąpić dziedziczy kilka metod.
Dlaczego chcę to?
Chcę przekazać trochę kodu w celu przełożenia struny do Name
nieruchomości. I dodaj jedną właściwość dla języka.
Coś jak:
[MyDisplay(Code = TRANSLATION_CODE, Language = "FR-FR")]
public string Fr { get; set; }
A wewnątrz MyDisplayAttribute, chcę zrobić jak:
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);`
}
Jest też inny sposób to zrobić?
UPDATE
Próbowałem też to:
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;
}
}
}
oraz w modelu
[MyDisplay(1, "en")]
public string Test
{
get;
set;
}
Czekam, aby wyświetlić test
w widoku, ale nie robi” t! Gdzie jest mój błąd?
Nie zastępuje funkcji "DisplayNameAttribute". Zwraca oczekiwaną wartość, ale nie wiąże jej z metadanymi. Musisz jawnie nadpisać wartość w metadanych modelu. –
Skoro twoje pytanie jest 2 lata temu, czy znalazłeś rozwiązanie tego problemu? –
@ChristianGollhardt: Niestety nie, stworzyłem mój atrybut niestandardowy, ponieważ DisplayNameAttribute jest zapieczętowany i nie może być dziedziczony. –