我们在数据库中有本地化的字符串,并想知道
extending the ASP.NET Resource Provider Model是否可以与ASP.NET MVC 3 Razor视图引擎一起使用.
请告诉我,一旦我们扩展了ASP.NET资源提供程序模型,ASP.NET MVC 3 Razor视图引擎是否支持从数据库中检索本地化字符串.或者它只适用于Classic ASP.NET而不适用于ASP.NET MVC.
谢谢
Satyaprakash J.
解决方法@H_301_10@
到目前为止我发现的最干净的解决方案是:
http://www.codeproject.com/Tips/514321/A-Simple-and-Effective-Way-to-Localize-ASP-Net-MVC.
欢迎提出意见/反馈.
我创建了一个customDataAnnotationsProvider类:
public class CustomDataAnnotationsProvider: DataAnnotationsModelMetadataProvider
{
private ResourceManager resourceManager = new ResourceManager();
protected override ModelMetadata CreateMetadata(
IEnumerable<Attribute> attributes,Type containerType,Func<object> modelAccessor,Type modelType,string propertyName)
{
string key = string.Empty;
string localizedValue = string.Empty;
foreach (var attr in attributes)
{
if (attr != null)
{
if (attr is DisplayAttribute)
{
key = ((DisplayAttribute)attr).Name;
if (!string.IsNullOrEmpty(key))
{
localizedValue = resourceManager.GetLocalizedText(key);
((DisplayAttribute)attr).Name = localizedValue;
}
}
else if (attr is ValidationAttribute)
{
key = ((ValidationAttribute)attr).ErrorMessage;
if (!string.IsNullOrEmpty(key))
{
localizedValue = resourceManager.GetLocalizedText(key);
((ValidationAttribute)attr).ErrorMessage = localizedValue;
}
}
}
}
return base.CreateMetadata(attributes,containerType,modelAccessor,modelType,propertyName);
}
}
然后我在Global.asax中的ApplicationStart上引用了自定义提供程序
ModelMetadataProviders.Current = new Project.Web.Helpers.CustomDataAnnotationsProvider();
您不必更改模型,可以使用显示注释:
[Display(Name = "CustomerAccountNumber")]
public string CustomerAccountNumber { get; set; }
欢迎提出意见/反馈.
我创建了一个customDataAnnotationsProvider类:
public class CustomDataAnnotationsProvider: DataAnnotationsModelMetadataProvider { private ResourceManager resourceManager = new ResourceManager(); protected override ModelMetadata CreateMetadata( IEnumerable<Attribute> attributes,Type containerType,Func<object> modelAccessor,Type modelType,string propertyName) { string key = string.Empty; string localizedValue = string.Empty; foreach (var attr in attributes) { if (attr != null) { if (attr is DisplayAttribute) { key = ((DisplayAttribute)attr).Name; if (!string.IsNullOrEmpty(key)) { localizedValue = resourceManager.GetLocalizedText(key); ((DisplayAttribute)attr).Name = localizedValue; } } else if (attr is ValidationAttribute) { key = ((ValidationAttribute)attr).ErrorMessage; if (!string.IsNullOrEmpty(key)) { localizedValue = resourceManager.GetLocalizedText(key); ((ValidationAttribute)attr).ErrorMessage = localizedValue; } } } } return base.CreateMetadata(attributes,containerType,modelAccessor,modelType,propertyName); } }
然后我在Global.asax中的ApplicationStart上引用了自定义提供程序
ModelMetadataProviders.Current = new Project.Web.Helpers.CustomDataAnnotationsProvider();
您不必更改模型,可以使用显示注释:
[Display(Name = "CustomerAccountNumber")] public string CustomerAccountNumber { get; set; }