文化是否自动应用于ASP.Net Webforms? (不是UICulture)

时间:2015-09-05 19:53:29

标签: c# asp.net webforms date-formatting

我有一个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);
}

1 个答案:

答案 0 :(得分:4)

Asp.net可以根据浏览器的说法自动设置文化。 (这是我们在Request.UserLanguages中获得的)。如果您这样做,"<%# this.OrderDate %>"将根据该格式自动格式化。

Look at the documentation

  

让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