0

在我在 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 还有其他属性。字符串和整数值正确通过。

我错过了什么?

4

2 回答 2

5

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

This answer to this similiar question显示了多种方法来实现这一点,我最喜欢的是JSON.parse(JSON.stringify(new Date()))但不支持IE7。

于 2013-05-13T16:59:34.120 回答
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 文档

于 2013-05-13T19:22:52.500 回答