web.config文件中将忽略resourceProviderFactoryType

时间:2012-03-04 14:08:39

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

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

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

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

在全球化部分拼写错误的类名称不会产生任何异常,这是正常的吗?

我在不止一个项目中尝试过这个(认为我正在处理的项目配置错误或者其他什么)但结果相同。

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

有没有人知道为什么会这样,有没有办法在运行时更改ResourceProviderFactory?

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

对mvc3中的剃刀视图做了一些思考,我没有看到使用这个resourceProviderFactory的任何证据,这就是为什么你的自定义资源提供程序没有被触及,我想这个功能并不意味着在MVC中使用,它只适用于Web表单,

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

    @
    {
       var resources = MyResources.ResourceClass;
    }

<p>@resources.MyTitle</p>

如果您想使用加载资源的自定义类,您只需将上面的变量资源指向不同的类,

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

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

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

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

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