Asp.net MVC 和 JSON 日期格式异常 - 值 '/Date(251071200000)/' 对出生日期无效



当我将JSON对象发布回Asp.net MVC时,我得到以下异常:

"The value '/Date(251071200000)/' is not valid for Date Of Birth."

在Firebug中,肯定有一个值被返回,所以我认为模型绑定中存在一些问题。如果我跟踪DateOfBirth属性的集合部分,则"value"为null。


设置为

具有DateOfBirth属性的C#POCO对象如下:

    public DateTime? DateOfBirth
    {
        get
        {
            return ClientDto.Contact.DateOfBirth;
        }
        set
        {
            ClientDto.Contact.DateOfBirth = value;
        }
    }

控制器操作将JSON数据发送到调用AJAX函数,如下所示(注意:我们在这里尝试了两个选项):选项1:

/*...extract and initialize a profile object...*/
return Json(profile, JsonRequestBehavior.AllowGet);

选项2:

/*...extract and initialize a profile object...*/
return Json(new JavaScriptSerializer().Serialize(profile), JsonRequestBehavior.AllowGet);

我们从客户端发回JSON数据,如下所示:

$.ajax({
    url: this.editForm.prop("action"),
    data: kendo.stringify(copy),  //can be replaced with JSON.stringify
    type: "POST",
    contentType: "application/json; charset=utf-8",
    success: function (args)
    {
        //done
    }
});

我不太清楚这个问题,但假设你确实从MVC中得到了一个值,如果错误与JSON日期格式有关,即'/date(251071200000)/',那么我也有同样的问题。

基本上,您传递的是Date的JSON格式。您需要将日期(在客户端或服务器上)转换为正确的日期格式。

我使用下面的函数将"/Date(210355200000)/"转换为"1/9/1976"

function fromJsonToJavaScriptDate(value) {
var pattern = /Date(([^)]+))/;
var results = pattern.exec(value);
var dt = new Date(parseFloat(results[1]));
return dt.getDate() + "/" + (dt.getMonth() + 1) + "/" + dt.getFullYear();}

您可以在类客户端上使用此功能;

$dob = fromJsonToJavaScriptDate([your date value])

您可以在服务器上找到转换这种json日期格式的方法,如下链接所述。

http://www.developer.com/net/dealing-with-json-dates-in-asp.net-mvc.html

我希望这能有所帮助。

最新更新