我们在数据库中有本地化的字符串,并想知道
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.
解决方法
到目前为止我发现的最干净的解决方案是:
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; }