2011-08-18 57 views
0

我有两个页面A和B.两个都应该显示一个文本使用适当的全球资源取决于文化设置在Web.Conf。可能的Bug - Asp.net路由本地化与线程奇怪的问题

Page A我能够根据文化设置(因此在这种情况下为法文)显示文字。

Page A还具有使用GetUrl创建一个网址(路由)到Page B

<asp:HyperLink 
      runat="server" 
      Text='<%# Eval("Title") %>' 
      NavigateUrl='<%# GetRouteUrl("TopicHub", new {TitleUrl = Eval("TitleUrl")}) %>'> 
</asp:HyperLink> 

在访问网页B的那一刻,我无法看到的文字在法国再和文本的链接应用英语(默认值)。 奇怪的东西是如果我在浏览器中直接打开页面B的文字显示在法语。

所以我调试的Global.asax.cs中,我发现了在点击与GetRouteUrl的VAR Thread.CurrentThread.CurrentCultureCurrentUICulture是英文,而不是法语作为我的web.config创建链接的时刻。

我的问题是:

  • 什么能在这里是什么问题?也许是一个错误?
  • 任何想法如何解决它?

我用尽了想法,最后想到的是在Global.asax.cs中强制使用Thread.CurrentThread.CurrentCulture使用Web.Conf中的值。

请让我知道你的想法。谢谢!

网页A:

<asp:Literal ID="uxLatestGuides" 
      runat="server" 
      Text="<%$ Resources:Global, LatestGuides %>" /> 

网页B:

<asp:Literal ID="uxLatestGuides" 
      runat="server" 
      Text="<%$ Resources:Global, LatestGuides %>" /> 

的Global.asax.cs

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    var check1 = Thread.CurrentThread.CurrentCulture; 
    var check2 = Thread.CurrentThread.CurrentUICulture; 
} 

的Web.Config

<?xml version="1.0"?> 
    <configuration> 
     <system.web> 
      <pages enableViewState="false" theme="Cms-FE-00" > 
      </pages> 
      <globalization culture="fr" uiCulture="fr"/> 
     </system.web> 
    </configuration> 

回答

0

我能找到解决这个问题的办法。

分析的Global.asax.cs中Routes我注意到虚拟URLtopic/{TitleUrl}将映射到物理网址~/Cms/FrontEndCms/CategoryList.aspx

routes.MapPageRoute("TopicHub", "topic/{TitleUrl}", "~/Cms/FrontEndCms/CategoryList.aspx"); 

在我特异性情况下,我不得不Web.Config文件中~/Cms/FrontEndCms/所以当在路由URL页面(如mysite.com/topic/my-page)上创建链接时,Web.Config将不在正确的位置,但在另一个文件夹中,因此我的文化设置不适用。

的解决方案是移动web.config中的ROOT为我的网站,因此将适用于所有航线。希望可以帮助别人。