可能的错误-线程的Asp.net路由定位奇怪问题



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

Page A上,我能够根据文化设置可视化文本(因此在本例中为法语)。

Page A也有一个链接,使用GetUrl创建一个Url(路由)到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的法语。

我的问题是:

  • 这里可能有什么问题?也许是一个bug?
  • 有什么好办法吗?

我已经没有想法了,所以最后的想法是在Global.asax.cs中使用Web.Conf.

中的值强制Thread.CurrentThread.CurrentCulture

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

页面:

<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;
}

网络。配置

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

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

分析Global.asax.cs Routes我注意到虚拟URL topic/{TitleUrl}将映射到物理URL ~/Cms/FrontEndCms/CategoryList.aspx
 routes.MapPageRoute("TopicHub", "topic/{TitleUrl}", "~/Cms/FrontEndCms/CategoryList.aspx");

在我的特殊情况下,我有Web。在~/Cms/FrontEndCms/中的配置文件,所以当一个链接将创建一个路由URL页面,如mysite.com/topic/my-page的Web。配置将不在正确的位置,而是在另一个文件夹中,因此我的区域性设置将不适用。

解决方案是移动Web。配置到ROOT为我的网站,所以它将适用于所有路由。希望可以帮助别人。

最新更新