2013-05-13 43 views
0

在我在VS2010中開發的MVC 4項目中,我有一個下拉菜單,顯示日期爲dd-MMM-yyyy顯示文本,底層值爲dd-mm- YYYY。在jquery post中沒有維護的日期格式

在發佈數據的函數中,我可以看到選中的值在d​​d-mm-yyy時會提醒我。

alert($("#dropdwn_BirthDateVal").val()); 

上面的這一行以dd-mm-yyyy格式顯示我的日期。

然而,在當我試圖將其值張貼到我控制器

$.ajax({ 
      type: "POST", 
      url:"@Url.Content("~/Home/GetUserDetails")", 
      async:false, 
      dataType: "JSON", 
      data: { 
       //.....other string and integer values 
       //.....that go thru properly 
       "myDto.DOB": $("#dropdwn_BirthDateVal").val() 
      }, 
      error: function (error) { 
       alert(error); 

      }, 

      ..... remaining code here 

同樣的方法...日期來作爲1/1/0001 12:00:00 AM

控制器動作我張貼到,「GetUserDetails」有一個名爲UserVM的ViewModel類作爲它的參數。 UserVM有一個名爲MyDto的dto類。 MyDto內部是Date類型的Date屬性,稱爲DOB。 MyDto也有其他屬性。字符串和整數值通過正確。

我錯過了什麼?

+0

可能您的服務器端編組不能識別或不期望「dd-mm-yyyy」作爲有效的日期模式。我沒有在.net工作,有沒有辦法在你的DTO中指定使用的日期模式? – cfs 2013-05-13 16:52:16

回答

4

將日期發送到服務器時需要將日期格式化爲ISO-8601,例如, 2011-12-19T15:28:46.493Z

這個答案this similiar question顯示了很多方法來實現這一點,我最喜歡的是JSON.parse(JSON.stringify(new Date())),但不支持IE7。

+0

如果將其轉換爲字符串並將其發送給控制器,則其分配的參數的類型爲DateTime。不會有問題嗎?我現在不在我的開發箱中試用它。 – user20358 2013-05-13 18:32:49

+0

不,.net序列化程序將知道如何處理基於所分配的類型和格式哦輸入字符串 – Jason 2013-05-13 21:02:37

1

DateTime收到時變成1/1/0001 12:00:00 AM,因爲日期格式(dd-mm-yyyy)無法正確解析。當框架無法解析日期/時間字符串時,結果就是上面的結果。

結果取決於您的機器本地化。例如,根據en-US本地化,.NET框架默認預期日期格式爲MM/dd/yyyy。但是,您可以按如下所示明確指定日期的格式。

using System.Globalization; 

// dateString is the string in your dd-MM-yyyy format 
public void GetValidDate(string dateString) 
{ 
    DateTime parsedDateTime; 
    DateTime.TryParseExact(dateString, "dd-MM-yyyy", null, 
           DateTimeStyles.None, out parsedDateTime) 
} 

看看MSDN documentation

+0

感謝您的答覆,實際上,我知道它沒有得到解析。爲什麼它沒有得到解析,以及如何解決這個問題就是我一直在尋找的。我在開發電腦上將位置設置更改爲美國,英國和法國,並且它們都具有相同的效果。日期仍然是1/1/0001 12:00:00上午 – user20358 2013-05-14 04:17:19

+0

您是否嘗試過明確解析? – erdinger 2013-05-14 15:51:37