大家好,stackoverflow 的居民们,我已经调试一个讨厌的 ajax POST 方法有点太长了,希望我能得到一些输入。我有一个 JavaScript 函数,它收集一个字符串数组来装箱并发送给我的 Controller 方法,但不幸的是参数数据没有被发送,我不明白为什么。
这是 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# Controller 方法:
注意:代码确实做到了这一点,但 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
属性。在我发布之前,它还有更多属性。
非常感谢您的任何意见。
最佳答案
dataKeys 有效负载需要字符串化为:
$.ajax({
//prev code
data: { datakeys : JSON.stringify(DataKeys) }
}).done(function (data) {
//success
});
在 MVC Controller 中,将 json 解析为:
public ActionResult CancelDoc(string[] datakeys)
{
dynamic sourceJson = JsonConvert.DeserializeObject(dataKeys, typeof(object));
DocObject Doc = new DocObject();
List<string> Datakeys = sourceJson.ToList();
}
关于javascript - AJAX POST 方法传递给 C# MVC Controller 方法的小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080867/