我有一个多选过滤器。我正在创建一个int数组,以通过ajax将所有选定项传递给控制器。
var selectedItems = [];
$.each($("#myDropDown option:selected"), function () {
selectedItems.push($(this).val());
});
在此多项选择中,可能有很多项目(超过500个)。例如,如果用户选择499项,则对于IIS服务器而言,所得的查询字符串太长。
我知道我可以在配置文件中更改maxQueryString
。也许我错了,但这似乎不是一个好主意。
今天我将其设置为30000,明天多选包含1000个项目,什么,我将更改为60000?
还有其他方法可以传递所选项目吗? (我不知道,变量还是其他)。
谢谢
编辑:
$.ajax({
url: '/Defaults/GetFilteredDefaults',
data: {
vehiculesFilter: selectedVehicules,
sectorsFilter: selectedSectors,
imputationsFilter:selectedImputations,
missionsFilter:selectedMissions,
piecesFilter:selectedPieces,
localizationsFilter:selectedLocalizations
},
traditional: true,
success: function (result) {
createDefaultList(result);
}
});
答案 0 :(得分:1)
我认为,您可以在AJAX中使用JSON.stringify($('#yourformid').serializeObject())
创建表单和数据发布。
$.ajax({
url: '/Defaults/GetFilteredDefaults',
data: JSON.stringify($('#yourformid').serializeObject()),
traditional: true,
success: function (result) {
createDefaultList(result);
}
});
但是您应该在脚本中添加函数:
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
答案 1 :(得分:0)
好吧,只需在Ajax中添加type:post
并将controller方法更改为[HttpPost]
。
感谢您的建议。
答案 2 :(得分:0)
您的jQuery代码绝对不错,并且对于前端代码,您无能为力,因为在服务器上设置了限制以接受URL参数作为字符串。
我们如何使其工作? 更改服务器方法以接受预定义模型中的数据,可能是带有属性的类。如果是C#Web API,这是您应该在后端使用的类:
public class QueryModel
{
public string vehiculesFilter { get; set; }
public string sectorsFilter { get; set; }
public string imputationsFilter { get; set; }
public string missionsFilter { get; set; }
public string piecesFilter { get; set; }
public string localizationsFilter { get; set; }
}
您的控制器方法应为:
public IHttpActionResult GetFilteredDefaults(QueryModel filtersObject){
// Your code logic to build response comes here
return ResponseMessage(response);
}