加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – ASP.NET MVC 3: – 使用数据库而不是资源文件

发布时间:2020-12-16 04:34:02 所属栏目:asp.Net 来源:网络整理
导读:我们在数据库中有本地化的字符串,并想知道 extending the ASP.NET Resource Provider Model是否可以与ASP.NET MVC 3 Razor视图引擎一起使用. 请告诉我,一旦我们扩展了ASP.NET资源提供程序模型,ASP.NET MVC 3 Razor视图引擎是否支持从数据库中检索本地化字符
我们在数据库中有本地化的字符串,并想知道 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.

欢迎提出意见/反馈.

编辑1:根据评论,我添加了代码示例并使用该链接作为参考.

我创建了一个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; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读