可能的错误-线程的Asp.net路由定位奇怪问题
本文关键字:定位 路由 问题 net Asp 错误 线程 | 更新日期: 2023-09-27 18:05:53
我有两个页面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.CurrentCulture
和CurrentUICulture
是英语的,而不是我的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.csRoutes
我注意到虚拟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为我的网站,所以它将适用于所有路由。希望可以帮助别人。