0

我正在使用网格数据创建一个报告,这样我就可以窃取我试图从我自己的方法在 MVC 中调用剑道网格处理程序的完全相同的外观。

我观察到 kendo 在更新网格时会发送此消息:

sort:dueDate-desc
page:1
pageSize:20
group:
filter:

到目前为止,为了格式化这个,我刚刚循环并手动创建了表单数据,例如排序字段:

     var sortSet = grid.dataSource.sort();
     var sortString = '&sort=';
     for (var i = 0; i < sortSet.length; i++) {
        sortString = sortString + sortSet[i].field + '-' + sortSet[i].dir + '~';
     }

有没有办法让剑道做到这一点?已经存储字符串的地方?

谢谢

4

2 回答 2

0

如果您dataSource在选项serverAggregates中定义serverFilteringserverGroupingserverPaging和 / 或serverSorting,KendoUI 会将这些参数发送到服务器,以让它完成需要做的事情以及所需的不同参数。

在这些情况下,您可以定义transport.parameterMaptransport.read.data允许您将参数从 KendoUI 内部格式转换或添加到您的服务器格式,因此您可以在此处拦截请求并保存最后一个请求的参数列表以供以后使用。

选项1

var savedParamAsJSON = undefined;
var savedParamAsStringifiedJSON = undefined;
var savedParamAsUriEncoded = undefined;
var savedParamAsUriDecoded = undefined;

var dataSource = new kendo.data.DataSource({
    serverPaging   : true,
    serverSorting  : true,
    serverFiltering: true,
    transport      : {
        read        : {
            url : "data.json"
        },
        parameterMap: function (data, type) {
            if (type === "read") {
                savedParamAsJSON = data;
                savedParamAsStringifiedJSON = JSON.stringify(data);
                savedParamAsUriEncoded = encodeURIComponent(jQuery.param(data));
                savedParamAsUriDecoded = jQuery.param(data);

                // Actual update the link
                $("#exportLink").attr("href", "http://www.onabai.com?" + savedParamAsUriDecoded);
            }
        }
    },
    schema         : {
        model: {
            id    : "ID",
            fields: {
                ID: { type: "number"}
            }
        }
    },
    pageSize       : 8

});

parameterMap我以四种不同的格式保存它:

  1. savedParamAsJSON并存储为savedParamAsStringifiedJSONJSON 对象或其字符串化表示(例如:) {"take":8,"skip":0,"page":1,"pageSize":8}
  2. InsavedParamAsUriEncoded存储为字符串,但作为 URI 编码(例如take%3D8%26skip%3D0%26page%3D1%26pageSize%3D8:)
  3. InsavedParamAsUriDecoded存储为字符串,但不是 URI 编码的(例如:)take=8&skip=0&page=1&pageSize=8

选项2:您也可以在transport.read.data定义保存数据的函数时这样做:

transport      : {
    read        : {
        url : "data.json",
        data: function (data) {
            savedParamAsJSON = data;
            savedParamAsStringifiedJSON = JSON.stringify(data);
            savedParamAsUriEncoded = encodeURIComponent(jQuery.param(data));
            savedParamAsUriDecoded = jQuery.param(data);

            // Actual update the link
            $("#exportLink").attr("href", "http://www.onabai.com?" + savedParamAsUriDecoded);
        }
    }
},
于 2013-01-11T11:51:49.953 回答
0

您可以使用该方法从涉及导出网格数据的代码库中生成链接。这是PDF的一个。

基本上,使用dataBound事件更新链接 URL 的魔术代码如下:

//initial URL of the link is generated with this helper

Url.Action("Export", "Home", new { page = 1, pageSize = "~", filter = "~", sort = "~" })


<script type="text/javascript">
    function onDataBound(e) {
        var grid = $('#Grid').data('kendoGrid');

        // ask the parameterMap to create the request object for you
        var requestObject = (new kendo.data.transports["aspnetmvc-server"]({ prefix: "" }))
        .options.parameterMap({
            page: grid.dataSource.page(),
            sort: grid.dataSource.sort(),
            filter: grid.dataSource.filter()
        });

        // Get the export link as jQuery object
        var $exportLink = $('#export');

        // Get its 'href' attribute - the URL where it would navigate to
        var href = $exportLink.attr('href');

        // Update the 'page' parameter with the grid's current page
        href = href.replace(/page=([^&]*)/, 'page=' + requestObject.page || '~');

        // Update the 'sort' parameter with the grid's current sort descriptor
        href = href.replace(/sort=([^&]*)/, 'sort=' + requestObject.sort || '~');

        // Update the 'pageSize' parameter with the grid's current pageSize
        href = href.replace(/pageSize=([^&]*)/, 'pageSize=' + grid.dataSource._pageSize);

        //update filter descriptor with the filters applied

        href = href.replace(/filter=([^&]*)/, 'filter=' + (requestObject.filter || '~'));

        // Update the 'href' attribute
        $exportLink.attr('href', href);
    }
</script>

我希望这就是你要找的。

于 2013-01-10T16:26:45.657 回答