数组到mvc控制器与ajax

本文关键字:ajax 控制器 mvc 数组 | 更新日期: 2023-09-27 17:53:21

我试图从列表中获得一些数据(多维数组)到我的get控制器(用于在模态/对话框中显示)(用户检查一些值,然后被发送到应该显示所选值的模态/对话框):

$('input:checkbox').each(function () {
    if ($(this).is(':checked')) {
        var prop= [];
        prop['Name'] = "TEST";
        prop['Id'] = "123"
        data.push(prop);
    }
});

当我记录这个(上面的)数据时,它看起来很好。然后我使用它ajax调用:

$.ajax({
    type: "GET",
    url: url,
    data: JSON.stringify({ data }),
    contentType: "application/json; charset=utf-8",
    success: function () {
        alert("OK");
    }
});

我有一个模型用于在操作(和部分视图)中使用数据:

public class MyClass
{
    public string Name { get; set; }
    public string Id { get; set; }
}

这是我的动作:

    public ActionResult Merge(MyClass[] theData)
    {
       ...
    }

但是在动作中'theData'总是空的。如果我在ajax中使用'POST', POST操作将被调用,我不想在这一步中这样做。我想使用POST动作之后,当用户做了一些修改(如。标题更改),然后保存。然后我做一个POST并保存新的数据

数组到mvc控制器与ajax

请尝试一下

  $('input:checkbox').each(function () {
        if ($(this).is(':checked')) {
            var prop= {};
            prop.Name  = "TEST";
            prop.Id = "123"
            data.push(prop);
        }
    });

你的Merge()方法中的参数是MyClass[] theData,这意味着你需要发送一个对象的数组,而不是数组的数组。首先修改脚本以生成

中的数据
var data = [];
$('input:checkbox').each(function () {
    if ($(this).is(':checked')) {
        data.push({ Name: 'TEST', Id: '123' });
    }
});

接下来,您需要将该方法更改为[HttpPost](如果有必要,将其重命名,以避免与任何现有的[HttpPost]public ActionResult Merge( .. )方法发生冲突)。

然后您需要将类型更改为"Post",并在发送之前使用方法参数的名称对数据进行字符串化

$.ajax({
    type: 'Post', // change this
    url: url,
    data: JSON.stringify({ theData: data }), // change this
    contentType: 'application/json; charset=utf-8',
    success: function () {
        alert("OK");
    }
});

旁注:如果你确实想对[HttpGet]方法这样做,那么有必要将数据作为.../Merge?[0].Name=TEST&[0].Id=123&[1].Name=TEST&[1].Id=123等(即与索引器)发送,但是你通常不应该将对象集合发送给GET方法。除了难看的查询字符串之外,还可能超出查询字符串限制并抛出异常。

您正在以字符串形式发送数据。不要使用JSON.stringify

改变data: JSON.stringify({ data })data: data