【发布时间】:2014-03-19 13:18:01
【问题描述】:
我有一个从网格中抓取行的点击功能。返回值是代表每一行的对象列表。我使用 JSON.stringify,所以我可以将数据发送到我的 Home Controller 上的 SaveJobs 操作。以下属性有效,并且我的控制器操作可以识别数据,但它不是有效的 JSON 格式。
contentType: 'application/json; charset=utf-8'
data: { data: JSON.stringify(editedRows) }
但是,我通过研究发现以下方法是首选,因为它是有效的 JSON 格式,但我的控制器操作上的数据变量为空(不返回任何数据来执行我的操作)并且我无法调试问题.为什么动作变量无法识别这一点?谢谢。
$('#SaveJobs').on('click', function () {
editedRows = getEditedRows();
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: savePlannedJobsUrl,
cache: false,
data: JSON.stringify({ data: editedRows }),
dataType: "text",
success: function (result) {
if (result === 'Success') {
alert('The records you have edited are saved');
}
else {
alert('There was an error with the server. All records may not have been saved.');
}
$("*").css("cursor", "");
},
error: function (HtmlHttpRequest, ajaxOptions, thrownError) {
var htmlObj = $.parseHTML(HtmlHttpRequest.responseText);
var savedJson = JSON.stringify(editedRows);
if (htmlObj !== null) {
var htmlBody = htmlObj[htmlObj.length-1].outerText;;
}
tryToWriteError(htmlBody, savedJson);
}
});
return false;
});
控制器
[HttpPost]
public string SaveJobs(string data)
{
// CODE HERE
}
回答: 我标记了@Queti 的答案,更具体到我的问题,请参阅我评论中的链接,这将有助于 MVC 项目。该解决方案将跳过创建 DTO。
【问题讨论】:
-
您需要查看客户端实际发送到服务器的内容。使用浏览器的开发者工具或 Fiddler。
-
第一种方法,有效但不是有效的 JSON,发送
data=%5B%7B%22id%22%3A7191....(more data here),第二种方法无效,但有效的 JSON,发送{"data":[{"id":5207,"Comments"...(more code)}]}
标签: ajax asp.net-mvc json