我有一个Webforms ASP.Net 4.5应用程序,它没有在web.config或代码中的其他地方指定的文化或uiculture设置。我担心来自不同国家的用户格式正确,即文化设置,而不是UICulture设置。
问题:如果这个ASP.Net应用程序被来自英国,德国和美国的用户使用,那么在asp:Label控件中显示日期值时会自动格式化,或者开发人员需要明确地做这种格式化?
使用ASP.Net Webforms的数据绑定语法对Label控件进行数据绑定,如下面的代码片段所示。例如,如果美国用户的订单日期是10/4/2014,那么对于英国或德国的用户,它应显示为4/10/2014。
HTML
<asp:Label id="lblOrderDate" runat="server" Text="<%# this.OrderDate %>"></asp:Label>
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
string orderId = this.txtOrderId.Text;
Order order = DAL.GetOrder( orderId );
this.OrderDate = order.OrderDate;
this.Page.DataBind();
}
public DateTime OrderDate { get;set; }
更新1
我不确定是否需要在Page code-behind中包含以下代码来设置文化,否则它将由ASP.Net自动完成?我的猜测是ASP.Net会自动执行此操作,但不确定。
protected override void InitializeCulture()
{
string language = "en-us";
//Detect User's Language.
if (Request.UserLanguages != null)
{
//Set the Language.
language = Request.UserLanguages[0];
}
//Set the Culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
}
答案 0 :(得分:4)
Asp.net可以根据浏览器的说法自动设置文化。 (这是我们在Request.UserLanguages中获得的)。如果您这样做,"<%# this.OrderDate %>"
将根据该格式自动格式化。
让ASP.NET将UI文化和文化设置为第一语言 在当前浏览器设置中指定,设置UICulture和 文化到汽车。或者,您可以将此值设置为 auto:culture_info_name,其中culture_info_name是区域性名称。对于 文化名称列表,请参阅CultureInfo。您可以进行此设置 在@Page指令或Web.config文件中。
<%@ Page Culture="auto" %>
或全局所有页面。
<configuration>
<system.web>
<globalization culture="auto"/>
</system.web>
</configuration>
但你无法信任Request.UserLanguages。这只是浏览器的偏好。最好允许用户通过列表框进行选择。
您可以通过覆盖页面的initializeculture调用以编程方式为每个请求显式设置它。
protected override void InitializeCulture()
{
if (Request.Form["ListBox1"] != null)
{
String selectedLanguage = Request.Form["ListBox1"];
Culture = selectedLanguage ;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
}
base.InitializeCulture();
}
母版页没有InitializeCulture()调用。因此,如果要对所有页面执行此操作,请创建继承Page的BasePage。然后允许所有页面从该页面继承。见this answer