2009-07-14 35 views
4

我有一個相當標準的.NET MVC控制器的方法:如何更改.Net MVC中DateTime模型綁定器上的默認輸入格式?

public ActionResult Add(Customer cust) { 
    //do something... 
    return View(); 
} 

如果客戶是一樣的東西:

public class Customer { 
    public DateTime DateOfBirth { get; set; } 
    //more stuff... 
} 

和包含的頁面:

<div><%= Html.TextBox("DateOfBirth") %></div> 

的問題是我的地盤位於美國服務器上,因此cust.DateOfBirth以美國格式MM/dd/yyyy進行解析。但是,我希望用戶以英國格式dd/MM/yyyy輸入其出生日期。

我可以更改DateTime ModelBinder上的默認輸入格式,還是必須創建我自己的定製ModelBinder?

回答

4

您可以在web.config文件或頁面級別更改文化。如果您只想更改日期格式而不更改文化的其他方面,則可能需要通過global.asax中的代碼或公共基本控制器修改當前區域的DateTimeFormat,並將其設置爲「en」的DateTimeFormat -GB」。

Reference

設置用戶界面的文化和文化 所有頁面,添加一個全球化部分 到Web.config文件,然後設置 的的UICulture和文化屬性, 如所示下面的例子:

<globalization uiCulture="en" culture="en-GB" />

要設置UI培養和培養 個體頁面上,設置文化 和的UICulture屬性@頁 指令,如下面的 例如:

<%@ Page UICulture="en" Culture="en-GB" %>

要讓ASP.NET設置UI文化和 文化的第一語言是在當前瀏覽器 設置中指定的 ,將UICulture和Culture設置爲 自動。或者,您可以將此 值設置爲auto:culture_info_name,其中 culture_info_name是區域名稱。 有關文化名稱的列表,請參閱 CultureInfo。您可以在@ Page指令或 Web.config文件中將此設置設置爲 。

備選:

CultureInfo.CurrentUICulture.DateTimeFormat 
    = CultureInfo.CurrentCulture.DateTimeFormat 
    = new CultureInfo("en-GB", false).DateTimeFormat; 
+0

謝謝,我無法使@Page指令工作,我正在使用母版頁並將其放置在視圖中。有任何想法嗎? web.config中的標記工作正常,現在我已經使用了這個標記,但是我希望在將來逐頁處理它。 – 2009-07-14 15:12:18

2

你可以改變不同的快捷模式的含義。在你的情況下,它將是短日期模式或「d」。如果您一般喜歡en-US文化,但只需要更改短日期時間的日期時間模式,則可以將其添加到Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    CultureInfo ci = new CultureInfo("en-US"); 
    ci.DateTimeFormat.SetAllDateTimePatterns(
     new string[] { "dd/MM/yyyy" }, 
     'd' 
    ); 
    System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
    System.Threading.Thread.CurrentThread.CurrentUICulture = ci; 
} 

第一個數組是支持的日期時間格式,第二個字符是您想要替換的模式。