2013-05-13 35 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