我正在尝试将列表/数组发送到MVC控制器方法:
var id = [];
var inStock = [];
$table.find('tbody>tr').each(function() {
id.push($(this).find('.id').text());
inStock.push($(this).find('.stocked').attr('checked'));
});
var params = {};
params.ids = id;
params.stocked = inStock;
$.getJSON('MyApp/UpdateStockList', params, function() {
alert('finished');
});
在我的控制器中:
public JsonResult UpdateStockList(int[] ids, bool[] stocked) { }
两个参数都是空的。
请注意,如果我将参数更改为单个项目
params.ids = 1;
params.stocked = true;
public JsonResult UpdateStockList(int ids, bool stocked) { }
然后它运作正常,所以我不认为这是一个路由问题。
答案 0 :(得分:39)
尝试设置traditional
标志:
$.ajax({
url: '/home/UpdateStockList',
data: { ids: [1, 2, 3], stocked: [true, false] },
traditional: true,
success: function(result) {
alert(result.status);
}
});
可以正常使用:
public ActionResult UpdateStockList(int[] ids, bool[] stocked)
{
return Json(new { status = "OK" }, JsonRequestBehavior.AllowGet);
}
答案 1 :(得分:22)
除了像Darin建议的那样调用.ajax()
而不是.getJSON()
,或者像jrduncans建议的那样将全局jQuery.ajaxSettings.traditional
设置为true
,您还可以传递调用{{3}的结果在params
对象上:
var id = [];
var inStock = [];
$table.find('tbody>tr').each(function() {
id.push($(this).find('.id').text());
inStock.push($(this).find('.stocked').attr('checked'));
});
var params = {};
params.ids = id;
params.stocked = inStock;
$.getJSON('MyApp/UpdateStockList', $.param(params, true), function() {
alert('finished');
});
答案 2 :(得分:6)
不幸的是,虽然看起来jquery提供了一个“传统”标志来在jQuery.ajax上切换这种行为,但它并不在jQuery.getJSON上。解决这个问题的一种方法是在全球范围内设置标志:
jQuery.ajaxSettings.traditional = true;
请参阅jQuery.param的文档:http://api.jquery.com/jQuery.param/ 另请参阅此更改的发行说明:http://jquery14.com/day-01/jquery-14(搜索“传统”)
答案 3 :(得分:0)
在视图中,生成multiple named fields(不是id
,因为id
每个字段应该是唯一的),注意Name
not name
的使用:
@foreach (var item in Model.SomeDictionary)
{
@Html.TextBoxFor(modelItem => item.Value.SomeString, new { Name = "someString[]" })
}
然后使用jQuery so:
检索输入字段值var myArrayValues = $('input[name="someString[]"]').map(function () { return $(this).val(); }).get();
您可以直接在jQuery / AJAX中使用它,如下所示:
$.ajax({
type: "POST",
url: "/MyController/MyAction",
dataType: 'json',
data: {
someStrings: $('input[name="someString[]"]').map(function () { return $(this).val(); }).get(),
someDates: $('input[name="someDate[]"]').map(function () { return $(this).val(); }).get(),
然后在MVC中的控制器动作中:
[HttpPost]
public JsonResult MyAction(string[] someStrings, DateTime[] someDates...