2015-09-05 38 views
3

我有一個Webforms ASP.Net 4.5應用程序,它沒有在web.config或代碼中的其他地方指定文化或uiculture設置。我關心的日期格式適合來自不同國家的用戶,即文化背景和UICulture背景。Culture是否自動應用於ASP.Net Webforms? (而不是UICulture)

問題:Label控件,或者開發者需要明確地做到這一點:如果ASP.Net應用程序是從英國,德國和美國使用的用戶,然後將日期值自動在ASP中顯示的格式時格式化?

Label控件是使用ASP.Net Webforms的數據綁定語法的數據綁定,如下面的代碼片段所示。例如,如果訂單日期是美國用戶10/4/2014,那麼對於英國或德國的用戶,它應該顯示爲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); 
} 

回答

4

文化可以根據瀏覽器的說法自動設置。 (這是我們在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()調用。所以如果你想爲所有頁面做這件事,那麼創建一個繼承頁面的BasePage。然後讓所有頁面從該頁面繼承。請參閱this answer

+0

優秀的答案。謝謝。 – Sunil

+0

我認爲,如果您可以包括訂單日期將自動格式化,如果您的方法得到遵守,這將是一件好事,因爲這是我的問題。 – Sunil

+1

好的。我會加上謝謝你的建議。 – justcoding124

相關問題