MVC 5 Ajax POST - 不识别ajax数据变量的动作变量

时间:2014-03-19 13:18:01

标签: ajax asp.net-mvc json

我有一个点击功能可以抓取网格中的行。返回值是表示每行的对象列表。我使用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。

1 个答案:

答案 0 :(得分:0)

问题是您正在发送一个对象数组,但您的操作方法需要一个字符串。

您的getEditedRows方法似乎正在返回一个对象数组。

我建议您在服务器上创建一个与您传入的模型相匹配的模型。例如:

public class MyDto
{
  int id { get; set; }
  string comments { get; set; }
}

然后更新您的方法签名以接受它作为参数:

public string SaveJobs(List<MyDto> data)