ASP.NET使用后重置线程文化?

时间:2010-09-21 00:10:03

标签: asp.net multithreading threadpool culture cultureinfo

如果我为一个ASPX设置了Thread Culture和UICulture,在该页面传递之后,我使用相同线程(不是同一个请求)的所有aspx将具有相同的文化?

因为我需要为一个ASMX设置文化

2 个答案:

答案 0 :(得分:0)

如果您设置的文化没有从浏览器设置中读取(就像它存在于数据库中那样)您需要在每个请求中设置它。

如下所述: http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

在每个页面上覆盖页面的'InitializeCulture'方法。所有页面的通用基类在这里非常方便。

我建议启动.NET反射器并查看默认实现的作用。它将有助于澄清默认情况下发生的事情。

因为这是事件在页面级别处理,而不是在Global.asax中处理,我希望这是重新设置的。此外,正如文章所述,此事件在页面生命周期的早期调用,捕获用户输入需要直接访问“Request.Form”。

编辑:请尝试此操作并查看必须在每个请求中设置此项。如果您看到不同的结果或我误解了您的问题,请告诉我。

Default.aspx:打印'21 .09.2010'

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>

<script runat="server">
protected override void InitializeCulture()
        {
            UICulture = "de-DE";
            Culture = "de-DE";
            //base.InitializeCulture();
        }   
</script>
<HTML>
<head>
</head>
<body>
<%= System.DateTime.Now.ToShortDateString()%>
</body>
</HTML>

Default2.aspx:打印'9/21/2010'(我的默认结构是es-US)

<%@ Page Language="C#" %>
<HTML>
<head>
</head>
<body>
<%= System.DateTime.Now.ToShortDateString()%>
</body>
</HTML>

您点击这些页面的顺序无关紧要。结果不会改变。

人们使用的一种方法是将此信息存储在Session变量中,并使用会话变量来设置文化。所以逻辑为中心化。

答案 1 :(得分:0)

我很确定UICulture一旦设置,就会停留在整个ASP会话中(这与您为自己的应用程序创建的会话无关)。

编辑:在这里看起来像一个简单的摘要:http://quickstarts.asp.net/QuickStartv20/aspnet/doc/localization/localization.aspx