我需要DisplayName
动态加载属性(从数据库)。例如这样的:
[DisplayName(getDescriptionForLanguage("test"))]
public string test{ get; set; }
但是只能DisplayName
动态加载,只允许使用常量。有没有办法DisplayName
从方法而不是从资源文件或常量中获取结果?
我需要DisplayName
动态加载属性(从数据库)。例如这样的:
[DisplayName(getDescriptionForLanguage("test"))]
public string test{ get; set; }
但是只能DisplayName
动态加载,只允许使用常量。有没有办法DisplayName
从方法而不是从资源文件或常量中获取结果?
可以调用返回非常量字符串的方法。
您必须创建一个新的属性类,例如:
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; }
}
没有办法改变这种行为。传递给属性的值必须是编译时常量,这意味着即使使用静态类的静态属性也无法解决问题。
正如 dtb 所建议的那样,您可以停止使用-attribute 来获取显示名称,而是在-attribute 的值被评估DisplayName
的地方构建自己的机制。DisplayName