我想使用DisplayAttribute
和Name
屬性。在ASP.NET MVC中使用或繼承DisplayAttribute創建自定義顯示屬性
問題是該類是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是密封的,不能被繼承。 –