我需要动态地(从数据库)为属性加载DisplayName
。例如:
[DisplayName(getDescriptionForLanguage("test"))]
public string test{ get; set; }
但是只能动态加载DisplayName
,只允许常量。
有没有办法让DisplayName
作为方法的结果而不是来自资源文件或常量?
答案 0 :(得分:2)
可以调用一个返回非常量字符串的方法 您必须创建一个新的Attributclass,例如:
class DisplayNameLanguage : DisplayNameAttribute
{
private readonly string resourceName;
public DisplayNameLanguage(string resourceName)
: base()
{
this.resourceName = resourceName;
}
public override string DisplayName
{
get
{
return getDescriptionForLanguage(resourceName);
}
}
}
现在您必须创建模型的部分子类。在那里,您可以使用新的属性来获取方法getDescriptionForLanguage
中的描述:
[MetadataType(typeof(TestMD))]
public partial class Test { }
public partial class TestMD
{
[DisplayNameLanguage("Test")]
public string Prop1 { get; set; }
}
答案 1 :(得分:0)
无法改变这种行为。传递给属性的值需要是一个编译时常量,这意味着即使使用静态类的静态属性也无法解决问题。
根据dtb的建议,您可以停止使用DisplayName
- 属性来获取显示名称,而是在正在评估DisplayName
- 属性值的位置构建自己的机制。