我有一个点击功能可以抓取网格中的行。返回值是表示每行的对象列表。我使用JSON.stringify,因此我可以将数据发送到我的Home Controller上的SaveJobs操作。以下属性有效,我的控制器操作可识别数据,但它不是有效的JSON格式。
contentType: 'application/json; charset=utf-8'
data: { data: JSON.stringify(editedRows) }
但是,我通过研究发现下面的方法是首选,因为它是一个有效的JSON格式,但我的控制器操作上的数据变量为null(没有返回数据来执行我的操作),我无法调试问题。为什么动作变量不能识别这个?谢谢。
$('#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
}
ANSWER : 我标记了@ Queti的答案,更具体到我的问题,请参阅我的评论中有助于MVC项目的链接。该决议将跳过创建DTO。
答案 0 :(得分:0)
问题是您正在发送一个对象数组,但您的操作方法需要一个字符串。
您的getEditedRows
方法似乎正在返回一个对象数组。
我建议您在服务器上创建一个与您传入的模型相匹配的模型。例如:
public class MyDto
{
int id { get; set; }
string comments { get; set; }
}
然后更新您的方法签名以接受它作为参数:
public string SaveJobs(List<MyDto> data)