jquery - 加载 Telerik MVC 网格状态

标签 jquery asp.net-mvc-4 telerik-grid telerik-mvc

我在保存/加载 Telerik MVC 网格控件的状态时遇到一些问题。

我发现许多使用 Kendo 网格的示例,但是我们没有访问权限或资源将我们的系统从原始 Telerik MVC 网格更改为 Kendo。

我可以使用 Cookie 保存和加载网格的当前状态,代码如下:

function setState() {
    var pricingGrid = $("#PricingGrid").data("tGrid");
    var dataSource = pricingGrid.dataSource;
    var state = JSON.stringify({
        page: pricingGrid.page,
        pageSize: pricingGrid.pageSize,
        sort: pricingGrid.orderBy,
        group: pricingGrid.groupBy,
        filter: pricingGrid.filterBy
    });

    $.cookie("pricingGridState", state);
}


function loadState() {
    var grid = $("#PricingGrid").data("tGrid");
    var state = JSON.parse($.cookie("pricingGridState"));
    if (state)
    {
        grid.sort(state.sort);
        grid.pageTo(state.page);
        grid.filter(state.filter);
    }
}

此代码似乎可以解决问题,但它会为每个方法(排序、pageTo 和过滤器)触发重新绑定(bind)调用。我计划保存页面上多个网格的状态,并且不想让每个网格在页面加载时重新绑定(bind) 3 次。

在 Kendo 中,我似乎能够使用“grid.dataSource.query”方法,但我似乎无法在 Telerik MVC 中使用类似的方法。

感谢任何帮助!

注意:我还尝试从 grid.dataSource 属性中保存 State 对象,但这些似乎根本没有加载网格状态。

最佳答案

经过一些研究,我找到了适合我的解决方案。这是我所做的:

//Prevent auto binding of grid and load state from cookie
var gridsToBind = [];    
function CommonGrid_onDataBinding(e) {
    if ($.inArray(e.target.id, gridsToBind) == -1) {
        e.preventDefault();
        gridsToBind.push(e.target.id);
        LoadGridState();
    }
}    
function LoadGridState() {
    var grid = $("#CommonGrid").data('tGrid');
    var state = $.cookie("gridState");
    if (state) {
        state = JSON.parse(state);
        grid.currentPage = state.currentPage;
        grid.orderBy = state.orderBy;
        grid.filterBy = state.filterBy;
        grid.pageSize = state.pageSize;
        for (var i in state.filteredCols) {
            if (state.filteredCols.hasOwnProperty(i)) {
                grid.columns[i].filters = state.filteredCols[i].filters;
                $("a[href*='=" + grid.columns[i].member + "-'").siblings(".t-grid-filter").addClass("t-active-filter");
            }
        }
        $("#CommonGrid").data('tGrid', grid);
    }
    grid.ajaxRequest();        
}

//Logic to save state of grid in cookie
function CommonGrid_OnDataBound(e) {
    var filteredCols = {};
    $.each(grid.columns, function (i, n) {
        if (!!n.filters) {
            filteredCols[i] = n;
        }
    });
    var state = JSON.stringify({
        currentPage: grid.currentPage,
        orderBy: grid.orderBy,
        filterBy: grid.filterBy,
        pageSize: grid.pageSize,
        filteredCols: filteredCols
    });
    $.cookie("gridState", state);
}

关于jquery - 加载 Telerik MVC 网格状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23684712/

相关文章:

javascript 在另一个函数下运行一个函数

asp.net-mvc-3 - 在 facebook C# SDK 6.4 中替代 Facebook 订阅验证

c# - MVC 模型在发布时为空

wpf - 从 RadGridView WPF c# 中删除分组网格线

JavaScript for HTML5 必填字段设置为在 Safari 中工作

javascript - 如果属性为显示 :none;?,则禁用表行

javascript - jQuery window.one ("click") 无法在移动设备上运行

asp.net - BaseController 在 MVC 中的用途是什么?

c# - CS1525 : Invalid expression term ')'

css - 如何在剑道网格中包装文本