如何从jQuery Ajax传递数组到MVC 5 Action?

3

我尝试通过Ajax将jQuery中的网格数据传递到MVC操作。 我的页面上有一个“保存”按钮,以下是单击的jQuery代码:

var result = [];
$('#btnSave').click(function () {
  $('#tblMatters tbody tr.mattersRow').each(function () {
    var item = {};

    if ($(this).find('td.qbmatter > div.dropdown').length > 0) {
      item.QBMatter = $(this).find('td.qbmatter > div.dropdown > a').text();
    } else {
      item.QBMatter = $(this).find('td.qbmatter').text();
    }

    item.Hours  = $(this).find('td.hours').text();
    item.Person = $(this).find('td.person').text();

    if ($(this).find('td.rate > div.dropdown').length > 0) {
      item.Rate = $(this).find('td.rate > div.dropdown > a').text();
    } else {
      item.Rate = $(this).find('td.rate').text();
    }

    item.Amount = $(this).find('td.amount').text();
    result.push(item);
  });

  $.ajax({
    url: "/Home/SaveQBMatter",
    type: "POST",
    data: { 'Matters': result },
    dataType: "json",
    traditional: true,
    contentType: "application/json; charset=utf-8",
    success: function (data) { alert("Success!"); },
    error: function () { alert("An error has occured!!!"); }
  });
});

我检查了result数组,它是正确的。它包含应该有的每个值。 在我的HomeController中,我有以下数据模型与我的数据相关:
public class QBMatter
{
    public string QBDescription { get; set; }
    public string Person { get; set; }
    public decimal Hours { get; set; }
    public int Rate { get; set; }
    public decimal Amount { get; set; }
}

接下来的操作:

public ActionResult SaveQBMatter (QBMatter[] Matters)
{
    DBAccess dba = new DBAccess();
    int QBMatterID = 0;
    foreach (QBMatter qb in Matters)
    {
        dba.InsertQBMatter(qb.QBDescription, qb.Person, qb.Hours, qb.Rate, qb.Amount, ref QBMatterID);
    }

    return RedirectToAction("Home", "Index", "Home");
}

但我总是得到 "发生错误了!!!" 的结果... 我甚至都没有到达action,所以错误可能出现在ajax层面... 我做错了什么?


非常好的问题,这正是我想做的事情,并且几乎有着相同的代码。 - Dylan Hayes
1个回答

7

在发送数据时,您需要将其转换为字符串。

尝试:

             $.ajax({
                url: "/Home/SaveQBMatter",
                type: "POST",
                data: JSON.stringify({ 'Matters': result }),
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    alert("Success!");
                },
                error: function () {
                    alert("An error has occured!!!");
                }
            });

谢谢!没错!一旦可以接受,我会立即接受! - Bryuk
1
完美的答案,我几乎有完全相同的设置,我的问题是我没有设置dataType / contentType。非常感谢。 - Dylan Hayes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接