网址中的查询字符串太长

时间:2019-01-09 08:56:11

标签: jquery asp.net-mvc url

我有一个多选过滤器。我正在创建一个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);
    }
});

3 个答案:

答案 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);
}