【发布时间】:2015-09-13 20:40:30
【问题描述】:
大家好,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(data)、JSON.stringify(data) 以及为此编写 JSON 对象的文字。
- 将调用简化为最基本的形式:我尝试注释掉
datatype和headers属性。在我发布之前,它还有几个属性。
非常感谢任何输入。
【问题讨论】:
-
我刚刚测试了您的代码,并且数组已传递给操作。你使用的是什么版本的 MVC?我猜框架可能无法绑定参数,但它确实在最新版本的 MVC 中工作。
-
我将您的代码粘贴到一个空白的 MVC 应用程序中,并且参数同时具有
dataKeys。当您收到 ajax 请求时,您确定DataKeys已填充? -
对我来说似乎很重要。所以,你确实尝试过 data : {dataKeys: JSON.stringify(dataKeys)} ?
-
@Dev-One 好的,我错过了那个。事实证明,只有
DataKeys变量将其正确打包。我可能需要对控制器进行一些解析,但这对我来说很好。谢谢! -
你的 asp.net mvc 版本是多少?你能显示http请求吗?
标签: javascript c# jquery ajax json