Javascript 获取剑道网格表单数据字符串

Javascript 获取剑道网格表单数据字符串,javascript,model-view-controller,kendo-ui,Javascript,Model View Controller,Kendo Ui,我正在使用网格数据创建一个报告,这样我就可以从我自己的方法中窃取与我试图在MVC中调用kendo grids handler完全相同的外观 我注意到kendo在更新网格时发送了以下消息: sort:dueDate-desc page:1 pageSize:20 group: filter: 到目前为止,我只是循环并手动创建了表单数据,例如排序字段: var sortSet = grid.dataSource.sort(); var sortString = '&so

我正在使用网格数据创建一个报告,这样我就可以从我自己的方法中窃取与我试图在MVC中调用kendo grids handler完全相同的外观

我注意到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 + '~';
     }
var sortSet=grid.dataSource.sort();
var sortString='&sort=';
for(var i=0;i
有没有办法让剑道做到这一点?一个已经存放绳子的地方


谢谢

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

基本上,使用数据绑定事件更新链接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>
//使用此帮助程序生成链接的初始URL
Action(“导出”、“主页”,新建{page=1,pageSize=“~”,filter=“~”,sort=“~”})
函数onDataBound(e){
var grid=$(“#grid”).data('kendoGrid');
//要求parameterMap为您创建请求对象
var requestObject=(新的kendo.data.transports[“aspnetmvc服务器”]({前缀:“}))
.options.parameterMap({
页面:grid.dataSource.page(),
排序:grid.dataSource.sort(),
过滤器:grid.dataSource.filter()
});
//将导出链接作为jQuery对象获取
var$exportLink=$(“#export”);
//获取其“href”属性-它将导航到的URL
var href=$exportLink.attr('href');
//使用网格的当前页面更新“page”参数
href=href.replace(/page=([^&]*)/,“page=”+requestObject.page | |“~”);
//使用网格的当前排序描述符更新“sort”参数
href=href.replace(/sort=([^&]*)/,'sort='+requestObject.sort | |'~');
//使用网格的当前页面大小更新“pageSize”参数
href=href.replace(/pageSize=([^&]*)/,'pageSize='+grid.dataSource.\u pageSize);
//使用应用的筛选器更新筛选器描述符
href=href.replace(/filter=([^&]*)/,'filter='+(requestObject.filter | |'~');
//更新“href”属性
$exportLink.attr('href',href);
}

我希望这就是您想要的。

如果您在
数据源中定义了
服务器聚合
服务器过滤
服务器分组
服务器分页
和/或
服务器排序
,KendoUI将把这些参数发送给服务器,让它知道需要做什么以及需要的不同参数

在这些情况下,您可以定义
transport.parameterMap
transport.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
中,我将其保存为四种不同的格式:

  • savedParamAsJSON
    savedparamasstringiedjson
    中,存储为JSON对象或其字符串表示形式(例如:
    {“take”:8,“skip”:0,“page”:1,“pageSize”:8}
  • savedparamasurencoded
    中,存储为字符串,但存储为URI编码(例如:
    take%3D8%26跳过%3D0%26页面%3D1%26页面大小%3D8
  • savedParamAsUriDecoded
    中,存储为字符串,但不是URI编码(例如:
    take=8&skip=0&page=1&pageSize=8
  • 选项2:您也可以在
    传输.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);
            }
        }
    },
    

    对不起,错过了什么!您要做的是保存网格的当前状态,以便将来(在恢复报告时)重播它。这是正确的吗?基本上,您只需要:页面大小(如果不总是相同的话)、页码、排序和过滤条件。您可以通过编程方式完成所有这一切。是否正确?当请求远程数据时,Kendo将页面、页面大小、组和筛选器发送到控制器。我正在尝试获取此URL,以便在我调用以创建报告(使用不同的控制器)时,控制器可以调用服务器上的剑道数据源并加载详细信息。这基本上就是我的代码现在要完成的,我只是好奇URL表单数据是否已经存在于剑道中的序列化表单中,供我在没有自己处理的情况下使用。