ASP中的模型绑定数组.净MVC

Model binding array in ASP.NET MVC

本文关键字:数组 MVC 绑定 模型 ASP      更新时间:2023-09-26

我正在使用Tablesorter,目前使用Ajax实现服务器端分页。Tablesorter支持对多列进行排序,并在单击第一列时使用以下URL:

http://example.com/tablesorter/json?page=0&size=25&column[0]=1

上面的工作与我的(Tablesorter)控制器动作:

public JsonResult Json(int page, int size, int[] column)

但是如果我只按第二列排序,则调用以下URL,这将导致列为空。我猜是由于缺少零索引值。

http://example.com/tablesorter/json?page=0&size=25&column[1]=1

所以我的问题是:我能以某种方式模型绑定使用其他类型的给定的表格式或我将不得不重写表的URL格式?

按多列排序时,格式为:

http://example.com/tablesorter/json?page=0&size=25&column[0]=1&column[1]=1

您可以使用customAjaxUrl选项来修改ajax url。

也许使用jQuery的$.param()函数会有所帮助?

ajaxUrl: 'http://example.com/tablesorter/json?page={page}&size={size}',
customAjaxUrl: function(table, url) {
    // sortList = [[1,0], [2,0]]
    var sort = $.param({ column : table.config.sortList });
    // result: "column[0][]=1&column[0][]=0&column[1][]=2&column[1][]=0"
    return url + '&' + sort;
}

如果格式不工作,那么它可能需要一些服务器端调整?


如果您必须定义所有列,请尝试以下代码:

ajaxUrl: 'http://example.com/tablesorter/json?page={page}&size={size}',
customAjaxUrl: function(table, url) {
    var i, v,
    c = table.config,
    s = c.sortList; // sortList = [[1,0], [2,0]]
    for (i = 0; i < c.columns; i++){
        v = 2;
        if ($.tablesorter.isValueInArray(i, s)) {
            $.each(s, function(j){ 
                if (s[j] && s[j][0] === i) {
                    v = s[j][1];
                }
            });
        }
        // 0 = ascending; 1 = descending; 2 = unsorted
        url += '&column[' + i + ']=' + v;
    }
    // result: "&column[0]=2&column[1]=0&column[2]=0&column[3]=2&column[4]=2"
    return url;
}

如果这不起作用,那么我不知道该告诉你什么,因为我不太了解ASP。净,模型绑定。你可能也想看看这个答案

我知道这是一个老问题,但是我根据motie的答案做了一些修改。

customAjaxUrl: function(table, url) {
    // build sort list
    var config = table.config;
    var sortList = config.sortList;
    for (var i = 0; i < config.columns; i++){
        var v = 2;
        $.each(sortList, function(j, item){ 
            if (item && item[0] === i) {
                v = item[1];
            }
        });
        // 0 = ascending; 1 = descending; 2 = unsorted
        url += '&sortColumn[' + i + ']=' + v;
    }
    // build filter list
    var filterList = config.pager.currentFilters;
    for (var i = 0; i < filterList.length; i++) {
        url += '&filterColumn[' + i + ']=' + filterList[i];
    }
    return url;
},

我的MVC动作声明看起来像这样

public ActionResult ListByPage(int page, int size, List<int> sortColumn, List<string> filterColumn)
{
}