动态更改动态数据项目中的数据注释
本文关键字:动态 数据 注释 数据项 项目 | 更新日期: 2023-09-27 18:14:37
我遇到过一个在动态数据Web应用程序中定制数据注释的场景。下面是这个场景:
[Display(Name="DispName")]
public string DName{get;set;}
而不是硬编码Name="DispName"显示数据注释,我想从数据库中获取一些值,并适合Name属性。如:
[Display(Name=SomeValueFromDB)]
public string DName{get;set;}
是否有任何方法来显示显示数据库的DataAnnotation的名称属性,而不是硬编码其值?
我怎么能改变脚手架列(真/假)基于表值?
我可以使用T4模板吗?
一般来说不会,这些属性会被编译并成为CIL元数据的一部分。为了调查这个问题,这是一个很好的SO线程,它深入到这个主题的一些细节。是否可以在运行时修改属性的属性?
我个人认为你应该寻找另一种方式来传递标签到前端,这样你就可以灵活。包含标签和值的模型。
不久之前,我们的后端设置页面和日志使用客户端的语言进行翻译,也遇到了类似的问题。
因为我们已经习惯了使用和实现。po翻译库与POEdit软件一起使用,我们选择了这种方式。
我们的属性大多已经有了名为DisplayName的自定义属性,我们用它来显示用户控件的标题。我们将这些属性更改为TranslatableDisplayName属性,并对其中的。tostring()方法进行公共重写,返回在属性构造函数中设置的名为"translationKey"的字段的翻译。
然后,我们将搜索模式"TranslatableDisplayName:1"添加到。po翻译文件中,导致我们所有的英文显示名称被使用并作为po文件中的翻译键列出。只需发送这些po,将其英语单词/句子翻译成特定的语言,就可以了。结果超级简单和有用。
属性的例子:
public class TranslatableDisplayName: Attribute
{
private string translationKey = string.Empty;
public TranslatableDisplayName(string translationKey)
{
this.translationKey = translationKey;
}
public override string toString()
{
return Languages.getString(translationKey);
}
}
在我们的例子中,
Languages是一个gnugettext翻译c#库,但可以是处理属性返回的任何方式。只要调用数据库查询,如果你愿意。您需要将它作为一个静态方法,除非您在创建软件时通过静态属性的属性或方法提供它,但在您第一次需要它之前。