2011-08-17 61 views
7

我有這個應用程序,默認的日期格式必須是dd/MM/yyyy(語言是巴西葡萄牙語)。ASP.Net MVC模型綁定 - 如何更改日期格式?

我已經設置了文化和UI文化pt-BR現在myDate.ToShortDateString(),因爲我想返回的日期。我沒有麻煩顯示它們。

問題是,當用戶填入日期如17/08/2011的輸入字段並提交表單時,我的操作的DateTime參數將變爲空。如果我提供格式爲08/17/2011的日期,它可以正常工作。

我怎樣才能讓ASP.Net MVC模型綁定正確解析我的日期?

+4

檢查這個答案http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format/528560#528560 – dotjoe

+0

嘗試從這個問題的解決方案http://stackoverflow.com/問題/ 6177626/asp-net-mvc-default-model-binder-problem – agradl

回答

10

我發現了什麼happended。我的形式通過GET方法發佈,以及MVC只使用了培養一個動作參數,當它在RouteData或通過POST方法窗體的傳遞。

我只是改變了形式POST方法和它的工作。

+0

僅僅因爲沒有人說過GET方法不適用文化,這一天就迷了路。保存了我的一天..謝謝,仍然,你應該糾正你的帖子,它與POST不起作用。 –

+0

更正。謝謝。 – Doug

+0

有關MVC ModelBinder如何工作的原因和原因:http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization – webStuff

2

我敢肯定,這個問題是缺乏對你的DateTime類型一個DateTimeFormat的。

<input type="text" name="DateProperty" id="DateProperty" 
     value="@(Model.DateProperty.Value.ToString("d", 
      System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat))" /> 

編輯**

你要確保的另一件事是,你輸入元素的「名稱」屬性匹配你傳遞什麼到你的行動。如果它不爲空,則每次都會在POST操作中出現。

 
    [HttpPost] 
    public ActionResult DoStuff(string dateParam) 
    { 
     return RedirectToAction("Home","Index", new { }); 
    } 

「dateParam」應該匹配這裏的name屬性。

<input id="dateParam" name="dateParam" value="10/10/2010" /> 
+0

將日期輸出到HTML不是問題。綁定提交的值是。即使我按照您所說的提交表單,也不會按預期工作。 – Doug

5

在視圖模型試試這個你的財產:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]