AJAX POST方法传递给C#MVC控制器方法

时间:2015-06-26 19:35:17

标签: javascript c# jquery ajax json

helloens of stackoverflow,我一直在调试一个讨厌的ajax POST方法有点太长了,并且希望我能得到一些输入。我有一个JavaScript函数,它收集一个字符串数组来装箱并发送给我的控制器方法,但遗憾的是参数数据没有被发送,我无法弄清楚原因。

这是JS功能:

$.ajax({
    url: 'CancelDoc',
    method: 'POST',
    datatype: 'json',
    headers: addAntiForgeryHeader(),
    data: { datakeys : DataKeys }
}).done(function (data) {
    if (data.status == 0) {
        alert("DOCUMENT CANCELLED SUCCESSFULLY");
    }
});

澄清一点:

DataKeys是字符串数组。它正是应该达到这一点。 看起来像:

["1432long-crazy4297-jumbled5826string|9000|1|1|NEW", 
"1432and2-another03-jumbled1594string|9000|1|1|NEW"]

addAntiForgeryHeader()是一个额外的客户端验证方法,我将其添加到所有POST。问题不应该在这里,因为我已经对此进行了评论以尝试调用,但它仍然没有传递数据。

C#控制器方法适用于:

注意:代码确实如此,但datakeys参数为null

public ActionResult CancelDoc(string[] datakeys)
{
    DocObject Doc = new DocObject();
    List<string> Datakeys = datakeys.ToList();

    foreach (var dk in Datakeys)
    {
        ...
        Some model logic here (not even making it here so no worries)
        ...
    }

    return Json(new { status = 0 });
}

我尝试过:

  • 以多种方式将数据转换为JSON:ko.mapping.toJS(数据),JSON.stringify(数据)以及为此创建JSON对象的文字。
  • 将通话解析为最基本的形式:我尝试评论datatypeheaders属性。在我发布之前,这还有一些属性。

非常感谢任何输入。

1 个答案:

答案 0 :(得分:1)

dataKeys有效负载需要字符串化为:

$.ajax({
    //prev code
    data: { datakeys : JSON.stringify(DataKeys) }
}).done(function (data) {
   //success
});

在MVC控制器中,将json desearlze为:

public ActionResult CancelDoc(string[] datakeys)
{ 
    dynamic sourceJson = JsonConvert.DeserializeObject(dataKeys, typeof(object));
    DocObject Doc = new DocObject();
    List<string> Datakeys = sourceJson.ToList();

}