【问题标题】:resourceProviderFactoryType is ignored in web.config fileweb.config 文件中的 resourceProviderFactoryType 被忽略
【发布时间】:2012-03-04 14:08:39
【问题描述】:

我一直在尝试在 web.config 文件中设置自定义 resourceProviderFactory 但它总是被忽略,我的 web.config 文件如下所示

<globalization culture="auto" resourceProviderFactoryType="MyProject.CustomResourceFactory, MyProject"></globalization>

我的 CustomResourceFactory 类永远不会被触发,也永远不会在构造函数处设置断点。

在全球化部分拼错类名不会引发任何异常,这正常吗?

我已经在多个项目中尝试过此方法(认为我正在处理的项目配置错误或其他原因),但结果相同。

我正在使用 C# asp.net MVC3,

有没有人知道为什么会发生这种情况,有没有办法在运行时更改 ResourceProviderFactory ?

谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 localization globalization


    【解决方案1】:

    我遇到了同样的问题,不太明白您对第一个答案的评论。现在我已经解决了,但我想我会为其他人详细说明。

    http://publicityson.blogspot.ca/2010/11/aspnet-mvc-razor-view-engine-and.html

    他创建了助手来调用他的自定义资源作为调用的剃须刀要求 视图中的ViewContext.HttpContext.GetGlobalResourceObject(classKey, resourceKey) 真的很长,结果如下:

    public static class CommonHtmlExtensions
    {
        public static object GetGlobalResource(this HtmlHelper htmlHelper, string classKey, string resourceKey)
        {
            return htmlHelper.ViewContext.HttpContext.GetGlobalResourceObject(classKey, resourceKey);
        }
        //several other methods.
    }
    

    允许他在剃刀视图中使用@Html.GetGlobalResource("CommonText", "Some_ResourceKey")

    对于在数据注释中保持强类型和可用性也非常有用,下面的链接显示了如何使用 T4 模板为数据库中的每个资源项创建常量。 http://carrarini.blogspot.ca/2010/08/localize-aspnet-mvc-2-dataannotations.html

    【讨论】:

    • 这个设置完全消失了是不是很奇怪?
    【解决方案2】:

    对 mvc3 中的 razor 视图进行了一些反思,我没有看到任何使用此 resourceProviderFactory 的证据,这就是为什么您的自定义资源提供程序没有被触及的原因,我猜这个功能并不打算在 MVC 中使用,它仅适用于网络表单,

    在 MVC 中使用资源只需指向您的 Resx 生成的类,例如:

        @
        {
           var resources = MyResources.ResourceClass;
        }
    
    <p>@resources.MyTitle</p>
    

    如果你想使用自定义类来加载你的资源,你可以简单地将上面的变量 resources 指向一个不同的类,

    但这也是我认为可以实现它的另一种方式。

    您可以将 Views 文件夹中 web.config 中的 pageBaseType 更改为您自己的继承自 WebViewPage 的类

    在此类中,您可以创建一个属性,该属性返回加载您的资源的自定义类的实例。

    通过这样做,您以后可以在 Views 文件夹中的任何视图中访问此属性。

    做任何适合你的情况。如果有更好的方法请分享。

    【讨论】:

    • 好吧,我发现如果执行 HttpContext.GetGlobalResourceObject(..) 它会进入我的提供程序。我已经构建了从基本属性和 html 帮助器派生的自定义数据注释属性以显示本地化文本 (Html.Localize(type, key))
    猜你喜欢
    • 2013-12-29
    • 2010-09-22
    • 2011-04-27
    • 1970-01-01
    • 2011-10-12
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多