【发布时间】:2013-12-09 07:45:15
【问题描述】:
我想将DisplayAttribute 与Name 属性一起使用。
问题是类是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);`
}
还有其他方法吗?
更新
我也试过这个:
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,但没有!
我的错在哪里?
【问题讨论】:
-
它不会覆盖
DisplayNameAttribute的功能。它确实返回了预期值,但没有将其绑定到元数据。您需要显式覆盖模型元数据中的值。 -
由于你的问题是2年前的问题,你找到解决办法了吗?
-
@ChristianGollhardt:不幸的是,我创建了自定义属性,因为 DisplayNameAttribute 是密封的,无法继承。
标签: c# asp.net-mvc