日期格式未在jquery帖子中维护

时间:2013-05-13 16:45:40

标签: asp.net-mvc jquery asp.net-mvc-4

在我在VS2010中开发的MVC 4项目中,我有一个屏幕,其下拉列表显示日期为显示文本的dd-MMM-yyyy,基础值为dd-mm-yyyy。

在发布数据的函数中,当我发出警告时,我可以看到所选的值是dd-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属性,名为DOB,类型为DateTime。 MyDto还有其他属性。字符串和整数值正确。

我错过了什么?

2 个答案:

答案 0 :(得分:5)

将日期格式化为ISO-8601时,需要将其格式化为服务器,例如: 2011-12-19T15:28:46.493Z

this similiar question的答案显示了实现此目的的一些方法,我最喜欢的是JSON.parse(JSON.stringify(new Date()))但不支持IE7。

答案 1 :(得分: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