【问题标题】:Is Culture automatically applied in ASP.Net Webforms? ( not UICulture)文化是否自动应用于 ASP.Net Webforms? (不是 UICulture)
【发布时间】:2015-12-01 17:41:04
【问题描述】:

我有一个 Webforms ASP.Net 4.5 应用程序,它没有在 web.config 或代码的其他地方指定文化或 uiculture 设置。我担心为来自不同国家/地区的用户正确格式化日期,即文化设置而不是 UICulture 设置。

问题:如果这个 ASP.Net 应用被英国、德国和美国的用户使用,那么在 asp:Label 控件中显示时是否会自动格式化日期值,或者开发者需要明确地进行这种格式化?

Label 控件是使用 ASP.Net Webforms 的数据绑定语法进行数据绑定的,如下面的代码 sn-ps 所示。例如,如果美国用户的订购日期为 2014 年 10 月 4 日,那么英国或德国用户的订单日期应显示为 2014 年 4 月 10 日。

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

我不确定是否需要在页面代码隐藏中包含以下代码来设置文化,还是由 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);
}

【问题讨论】:

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


    【解决方案1】:

    Asp.net 可以根据浏览器的内容自动设置文化。 (这是我们在 Request.UserLanguages 中得到的)。如果您这样做了,"&lt;%# this.OrderDate %&gt;" 将基于此自动格式化。

    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

    【讨论】:

    • 优秀的答案。谢谢。
    • 我认为,如果您可以包含 OrderDate 如果遵循您的方法将被自动格式化,那将是很好的,因为这是我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多