如果我为一个ASPX设置了Thread Culture和UICulture,在该页面传递之后,我使用相同线程(不是同一个请求)的所有aspx将具有相同的文化?
因为我需要为一个ASMX设置文化
答案 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