AJAX在数据中发送日期,但C#控制器不包含数据

时间:2015-06-02 06:29:44

标签: c# jquery ajax

我在我的MVC网站发送ajax请求时遇到了奇怪的行为。 我有一个函数跟随调用:

$.ajax ({
    data: JSON.stringify({event_id: params.eventId, start_date: params.startDate}),
    type: "POST",
    async: false,
    contentType: "application/json; charset=utf-8",
    url: '@Url.Action("RandomFunction")',
    success: function(return string) {
        //DoSomeStuff
    }
});

然后在控制器中有这个功能:

[HttpPost]
public ActionResult RandomFunction(int eventId = 1, string startDate = "")
{
    if (startDate == string.Empty) {
        //Handle missing date
    }

    //DoSomeMagic
}

Google Chrome的开发人员工具显示所需数据是通过邮寄请求发送的。

Request Payload:
event_id: "1"
start_date: "2015-06-08T22:00:00.000Z"

但是一旦它到达RandomFunction,startDate字符串被设置为空字符串而不是通过请求发送的日期,代码最终在处理缺少日期部分

我做错了吗?我暂时想不出来。

3 个答案:

答案 0 :(得分:4)

此示例适用于我:

$.ajax ({
    data: {
        eventId: params.eventId, 
        startDate: params.startDate
    },
    type: "POST",
    async: false,
    contentType: "application/json; charset=utf-8",
    url: '@Url.Action("RandomFunction")',
    success: function(return string) {
        //DoSomeStuff
    }
});

和C#代码:

[HttpPost]
public ActionResult RandomFunction(int eventId, string startDate)
{
    if (startDate == string.Empty) {
        //Handle missing date
    }

    //DoSomeMagic
}

答案 1 :(得分:3)

试试这个,你在控制器中传递的参数名称和接收参数名称是不同的,所以..使它们相同..

[HttpPost]
public ActionResult RandomFunction(int event_id= 1, string start_date= "")
{
    if (start_date== string.Empty) {
        //Handle missing date
    }

    //DoSomeMagic
}

此致

答案 2 :(得分:1)

我希望您的问题是由于使用JSON.stringify

之间存在差异
"{event_id: 1, start_date: \"2015-06-08T22:00:00.000Z\"}"

只是一个字符串,

{event_id: 1, start_date: "2015-06-08T22:00:00.000Z"}

这是MVC框架可以解析的JObject。

还要确保JSON中的名称与参数的名称匹配