Javascript 获取剑道网格表单数据字符串
我正在使用网格数据创建一个报告,这样我就可以从我自己的方法中窃取与我试图在MVC中调用kendo grids handler完全相同的外观 我注意到kendo在更新网格时发送了以下消息: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
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表单数据是否已经存在于剑道中的序列化表单中,供我在没有自己处理的情况下使用。