数组到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并保存新的数据
请尝试一下
$('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