2013-02-28 87 views
3

鑑於此VMMVC3日期在控制器

public class ApplicationDTO : BaseDTO 
{ 
    public DateTime Date { get; set; } 
    public int JobId {get;set;} 
    public int Status {get;set;} 
    [Required] 
    public string Message { get; set; } 
    public string ExpertCode { get; set; } 
} 

我有一個隱藏字段正是如此

@Html.Hidden("Date", DateTime.Now) 

其中小提琴手顯示我被送到如我期望的服務器沒有收到(UK格式,我在英國!)

enter image description here

但在控制器t t他日期顯示爲默認分鐘。日期

enter image description here

難道僅僅是英國的格式?如果是這樣,我最好的方法是什麼?雖然目前我將它設置爲當前日期,有可能它可以被我使用AJAX提交表單,如果有差別設置爲任何給定的日期即

@Html.HiddenFor(x => x.Date) 

+0

POST或GET?我相信Get。對於Get MVC使用文化不變格式(基本上是US,但也接受yyyy-mm-dd)。看到這裏http://stackoverflow.com/questions/4349589/globalization-problem-with-datetime-and-asp-net-mvc-3-model-binding – GraemeMiller 2013-02-28 23:18:38

+0

你是正確的,它是一個GET。啊哈。聽起來像我需要設置文化。 – glosrob 2013-02-28 23:20:03

+0

不設置文化不會有幫助。所有Gets都使用文化不變格式,或者無法傳遞查詢字符串。如果您想要激發該行爲,您必須編寫自定義模型聯編程序 – GraemeMiller 2013-02-28 23:20:55

回答

5

如果它是一個獲取MVC模型綁定時默認使用的文化不變的格式(基本上美國格式)。所以它不接受英國的日期格式。我相信設計理由是查詢字符串可以傳遞,所以它需要文化不變(我並不完全相信這個邏輯)。

本文介紹了一個可能的解決方案http://xhalent.wordpress.com/2011/05/14/localization-of-dates-in-asp-net-mvc/

我們只是確保我們不會做與英國的日期格式

這一個問題也得到覆蓋問題Globalization problem with DateTime and ASP.NET MVC 3 Model Binding

+0

我可以使用Html.Hidden(「Date」,DateTime.Now.ToString(「yyyy/mm/dd」))並且它可以正確綁定。這對我來說很好,因爲用戶不需要看到這個日期(因此隱藏)。謝謝! – glosrob 2013-02-28 23:28:46

+0

很高興提供幫助。我討厭在整個應用程序中處理這個問題:)。當你在做Ajax時更容易,你不必擔心他們看到了這些值。 – GraemeMiller 2013-02-28 23:30:38

+0

事實上,當我們必須在英國展示日期並以yyyy/mm/dd發回時,這確實意味着有一個相當有趣的橋樑可以越過這條線。猜猜答案是攔截get,手動轉換日期並將其發送到服務器。樂趣。 – glosrob 2013-02-28 23:32:55

1

你應該使用數據註釋來格式化日期你的模型或視圖模型

public class ApplicationDTO : BaseDTO 
{ 
    [DisplayFormat(DataFormatString="{0:dd/MM/yyyy}", ApplyFormatInEditMode=true)] 
    public DateTime Date { get; set; } 
    public int JobId {get;set;} 
    public int Status {get;set;} 
    [Required] 
    public string Message { get; set; } 
    public string ExpertCode { get; set; } 
} 

應用根據您的格式。 正如我所看到的,你沒有提供任何格式給你的財產

+2

仍然到達服務器一分鐘。日期時間值 – glosrob 2013-02-28 23:21:27

0

我有一個dd.MM.yyyy格式的類似問題,並且必須在web.config中設置全球化元素爲適當的文化和uiCulture屬性設置。

0

如果使用@Html。隱藏(不是For helper),它將無法將請求中的參數與模型中的屬性相匹配。

如果使用@ Html.HiddenFor(X => x.Date, 「28/2/2013」​​),你會看到填入適當的日期。你

也可以驗證Request.Params集合。在Action中放置一個斷點。你會看到其中一個Params有你的日期.... JQuery不會以任何方式影響這個。

+0

只要名稱的HTML屬性匹配,它就會綁定。它與上面vm上的所有其他屬性一起執行此操作。 – glosrob 2013-02-28 23:27:36