2011-08-24 18 views
2

我正在开发一个项目,其中包含所有ascx文件的根文件夹和一个名为“UserControls”的文件夹中的aspx文件。我不得不本地化它,所以我使用App_GlobalResources和App_LocalResources作为资源文件。但是,我遇到了用户控件的问题,因为它们没有读取它们各自的资源文件。我开始进行一些测试,并且我意识到只有当它们被放置在它们各自的包含文件夹中的App_LocalResources子文件夹中而不是在根文件夹中时,它们才会读取资源文件。由于我有太多的用户控件的子目录,我不想将每个本地资源文件放在它的主要包含文件夹中。这只是没有意义。任何人有一些想法?提前致谢。用户控制不读资源文件...在WebForms .NET上正确组织资源文件?

回答

3

如果不查看您的项目文件,我猜测没有从根App_LocalResources文件夹读取其资源的页面是其文件名与另一个页面发生冲突的页面。例如。如果你有/cart/Default.aspx和/myaccount/Default.aspx,那么ASP.NET将不知道哪一个匹配/App_LocalResources/Default.aspx.resx。这就是为什么它需要这些页面的资源文件位于他们自己的子文件夹中:使其明确显示它们匹配的页面。

我认为,如果你想避免这种情况,你有三种选择:

  1. 改变一切,以全球资源。只要确保资源名称的组织良好,并且很明显它们适用于哪个页面,这并不是那么糟糕。
  2. 将页面文件名更改为唯一。这非常丑陋,因为它可能会破坏应用中的重定向以及SEO。
  3. 不要使用ASP.NET资源进行本地化,请推出自己的解决方案。严重的是,Resources是ASP.NET中众多漂亮且看似实用的功能之一(另请参阅主题,移动支持,角色),根据我的经验,这些功能不能很好地扩展到较大的项目,并且最好忽略自定义解决方案。例如,如果您的ASP.NET应用程序调用需要返回本地化文本的中间层DLL,会发生什么情况?在这种情况下更好地拥有自己的低级资源本地化系统。
+0

我会为#1提出建议 - 我经历了同样的事情,并放弃尝试使用本地资源。 – chris

+0

我有两个名为Default.aspx的文件,如你所说...我必须保持资源,因为它是一个已经在生产中的项目,所以现在没有太多的工作要做......感谢你的想法! –

0

检查App_LocalResources目录是否位于usercontrol的同一个文件夹中。