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 });
}
我尝试过:
datatype
和headers
属性。在我发布之前,这还有一些属性。非常感谢任何输入。
答案 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();
}