我一直在尝试在web.config文件中设置自定义resourceProviderFactory,但它总是被忽略,我的web.config文件如下所示
<globalization culture="auto" resourceProviderFactoryType="MyProject.CustomResourceFactory, MyProject"></globalization>
永远不会触发我的CustomResourceFactory类,永远不会在构造函数中设置断点。
在全球化部分拼写错误的类名称不会产生任何异常,这是正常的吗?
我在不止一个项目中尝试过这个(认为我正在处理的项目配置错误或者其他什么)但结果相同。
我正在使用C#asp.net MVC3,
有没有人知道为什么会这样,有没有办法在运行时更改ResourceProviderFactory?
感谢。
答案 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文件夹中的任何视图中访问此属性。
做任何适合你的情况。如果有更好的方法,请分享。