【问题标题】:Model binding array in ASP.NET MVCASP.NET MVC 中的模型绑定数组
【发布时间】:2013-05-27 07:34:30
【问题描述】:

我正在使用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

所以我的问题是:我能否以某种方式使用其他类型对给定的 Tablesorter 格式进行模型绑定,还是必须重写 Tablesorter 的 URL 格式?

当按多列排序时,格式为:

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

【问题讨论】:

    标签: javascript asp.net-mvc model-binding tablesorter


    【解决方案1】:

    您可以根据需要使用customAjaxUrl option 修改 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.NET 和模型绑定知之甚少。您可能还想查看this answer

    【讨论】:

    • 嘿,莫蒂。是的,我阅读了有关 customAjaxUrl 的文档,如果我无法获得标准格式来使用 ASP.NET MVC 的模型绑定,我正在考虑使用它。我尝试使用 $.param 并且仅在对第二列进行排序时将格式更改为 &column[0][]=1&column[0][]=0 ,但我不知道如何建模绑定这种格式.问题是(我猜)第二个索引是空的。
    • 我不确定它会有多大帮助,但我已经更新了我的答案。
    【解决方案2】:

    我知道这是一个旧项目,但我使用 Mottie 的答案并对其进行了一些修补。

    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)
    {
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 2010-09-21
      • 2010-10-13
      • 2011-03-15
      相关资源
      最近更新 更多