とName
プロパティを使用します。ASP.NET MVCでDisplayAttributeを使用してカスタム表示属性を作成する
問題は、クラスがsealed
であり、いくつかのメソッドをオーバーライドするために継承できないということです。
なぜ私はこれが欲しいですか?
文字列をName
プロパティに変換するためにコードを渡したいとします。言語のプロパティを1つ追加します。
のような何か:
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);`
}
それを行うための別の方法があります:
[MyDisplay(Code = TRANSLATION_CODE, Language = "FR-FR")]
public string Fr { get; set; }
そしてMyDisplayAttribute内部、私は次のようにやってみたいですか?
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;
}
}
}
とモデルに:
UPDATE
私も、この試みた私は、ビューでtest
を表示するように期待してい
[MyDisplay(1, "en")]
public string Test
{
get;
set;
}
を、しかし」doesnのt! 私のミスはどこですか?
'DisplayNameAttribute'の機能を上書きしません。それは期待値を返しますが、メタデータにバインドしません。モデルメタデータの値を明示的に上書きする必要があります。 –
あなたの質問は2年前ですので、解決策を見つけましたか? –
@ChristianGollhardt:残念ながら、DisplayNameAttributeが封印されており、継承できないため、私はカスタム属性を作成しました。 –