可能的错误 - Asp.net路由本地化线程的奇怪问题

时间:2011-08-18 12:56:30

标签: c# asp.net routing

我有两个页面A和B.两者都应该使用适当的全局资源显示文本,具体取决于Web.Conf中的文化设置。

Page A我可以根据文化设置(在这种情况下是法语)可视化文本。

Page A还有一个使用GetUrl创建到Page B

的网址(路由)的链接
<asp:HyperLink 
           runat="server" 
           Text='<%# Eval("Title") %>' 
           NavigateUrl='<%# GetRouteUrl("TopicHub", new {TitleUrl = Eval("TitleUrl")}) %>'>
</asp:HyperLink>

在访问页面B页面我不能再看到法语文字了,并且应用了英文文本(默认值)。 奇怪的事情是我直接在浏览器中打开Page B,Literal以法语显示。

所以我调试了Global.asax.cs,我发现在点击使用GetRouteUrl创建的链接时,var Thread.CurrentThread.CurrentCultureCurrentUICulture是英文的而不是法文的,而不是我的Web.Config中。

我的问题是:

  • 这可能是什么问题?也许是一个错误?
  • 知道怎么解决吗?

我的想法已经用完了,所以最后的想法是使用Web.Conf中的值强制使用Thread.CurrentThread.CurrentCulture在Global.asax.cs中。

请让我知道你对此的看法。谢谢!

第A页:

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

Page 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>

1 个答案:

答案 0 :(得分:0)

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

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

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

在我的特定情况下,我在~/Cms/FrontEndCms/中有了Web.Config文件,因此当在{Routed URL页面'上创建链接时,如mysite.com/topic/my-page,Web.Config将不在正确的位置但在另一个文件夹中,我的文化设置不适用。

解决方案是将Web.Config移动到我的网站的ROOT,以便它适用于所有路由。希望可以帮助其他人。