如何在 C# 中从数据库 > 资源文件中检索数据注释字符串?
How to retrieve data annotation strings from Database > Resource File in C#?
在 ASP.NET MVC5 中,我们使用的资源文件非常适合提供跨应用程序的翻译。这也适用于注释。
[Required]
[Display(Name = "ROLE", ResourceType = typeof(AdminRes))]
public string UserRole { get; set; }
注释的字符串当前存储在资源文件中。
但我想要实现的是:我想检查数据库是否存在某个字符串(即 "ROLE")。如果是这样,我想将其用作 [Display(Name = "string")
。如果没有找到这样的字符串,我想使用现有的资源文件作为替代并从那里获取字符串。
知道如何让它工作吗?
我是这样做的:
添加了我自己的 CustomModelMetadataProvider...
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
private DynamicStringService DynamicStringService;
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,
Type containerType, Func<object> modelAccessor,
Type modelType, string propertyName)
{
var modelMetadata = base.CreateMetadata(attributes, containerType,
modelAccessor, modelType, propertyName);
List<DisplayAttribute> list = attributes.OfType<DisplayAttribute>().ToList();
foreach (DisplayAttribute d in list)
{
if (!string.IsNullOrEmpty(d.Name))
{
try
{
DynamicStringService = DependencyResolver.Current.GetService<DynamicStringService>();
Language userLanguage = GetCurrentUILanguage();
string changingValue = DynamicStringService.ChangeName(d.Name, userLanguage);
modelMetadata.DisplayName = changingValue;
}
catch (Exception e)
{
continue;
}
}
}
return modelMetadata;
}
}
..其中 DynamicStringService 检查数据库中注释 [Display] 中的字符串。
CustomModelMetadataProvider 在 Application_Start() 中的 Globasl.asax.cs 中使用如下:
ModelMetadataProviders.Current = new CustomModelMetadataProvider();
在 ASP.NET MVC5 中,我们使用的资源文件非常适合提供跨应用程序的翻译。这也适用于注释。
[Required]
[Display(Name = "ROLE", ResourceType = typeof(AdminRes))]
public string UserRole { get; set; }
注释的字符串当前存储在资源文件中。
但我想要实现的是:我想检查数据库是否存在某个字符串(即 "ROLE")。如果是这样,我想将其用作 [Display(Name = "string")
。如果没有找到这样的字符串,我想使用现有的资源文件作为替代并从那里获取字符串。
知道如何让它工作吗?
我是这样做的:
添加了我自己的 CustomModelMetadataProvider...
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
private DynamicStringService DynamicStringService;
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,
Type containerType, Func<object> modelAccessor,
Type modelType, string propertyName)
{
var modelMetadata = base.CreateMetadata(attributes, containerType,
modelAccessor, modelType, propertyName);
List<DisplayAttribute> list = attributes.OfType<DisplayAttribute>().ToList();
foreach (DisplayAttribute d in list)
{
if (!string.IsNullOrEmpty(d.Name))
{
try
{
DynamicStringService = DependencyResolver.Current.GetService<DynamicStringService>();
Language userLanguage = GetCurrentUILanguage();
string changingValue = DynamicStringService.ChangeName(d.Name, userLanguage);
modelMetadata.DisplayName = changingValue;
}
catch (Exception e)
{
continue;
}
}
}
return modelMetadata;
}
}
..其中 DynamicStringService 检查数据库中注释 [Display] 中的字符串。
CustomModelMetadataProvider 在 Application_Start() 中的 Globasl.asax.cs 中使用如下:
ModelMetadataProviders.Current = new CustomModelMetadataProvider();