我正在使用Telerik UI for ASP.NET MVC,我的网格定义如下
@(Html.Kendo().Grid<GridModel>()
.Name("grid")
.Columns(col =>
{
col.Bound(o => o.ID)
.ClientTemplate("<input class = 't-checkbox-selectrow' type='checkbox' value='#=ID#'/><label></label>")
.HeaderTemplate("<input class = 't-checkbox-selectallrows' type='checkbox' id='selectAll'/><label></label>")
.Sortable(false)
.Filterable(false)
.HtmlAttributes(new { @class = "t-gridcol-selectrow" })
.Width(40)
.Locked(true).Lockable(false);
col.Bound(o => o.StatusName).Width(150);
col.Bound(o => o.Deadline).Width(120);
col.Bound(o => o.Cost).Width(150);
})
.AutoBind(false)
.Pageable(x => x.PageSizes(UIConstants.PageSizes))
.Sortable(x => x.AllowUnsort(false))
.Resizable(resizing => resizing.Columns(true))
.Reorderable(reorder => reorder.Columns(true))
.Scrollable(s => s.Height("Auto"))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(UIConstants.DefaultPageSizeMax)
.Read(read => read
.Action("GetData", "DataProvider"))
.ServerOperation(false))
)
然后在JS文件中我将网格的页面重置为1 onRequestEnd,因此每当我从远程服务获取数据时,用户总是返回第一页
$(function(){
var ds = $("#grid").data("kendoGrid").dataSource;
ds.bind("requestEnd", function (e){
e.sender.page(1);
})
})
requestEnd
远程服务请求完成时触发。
然而,requestEnd
事件也会在页面更改(和排序)时触发。因此,当我更改程序化页面时,它会再次触发requestEnd
事件并进入循环。 (当我在UI上手动更改页面或排序时,注意requestEnd
也会被触发)
这是设计还是错误的文档?
答案 0 :(得分:0)
e.response
仅在requestEnds
作为服务器响应的一部分时填充。在所有其他情况下,它将为空。
dataSource.bind("requestEnd", function (e) {
if (e.status != "error" && e.response != null) {
// do soemething here
}
我真的希望剑道团队解决问题或创建新事件
答案 1 :(得分:0)
这个问题是 3 年前提出的,但我在查找其他信息时遇到了这个问题。我在这里的时候,我会替其他人回答,因为LP13可能不再关心这个了。
在 HTML Razer 代码中,将 RequestEnd 事件添加到数据源。下面是一个例子:
@(Html.Kendo().Grid<GridModel>()
.Name("grid")
// (snip)
.DataSource(dataSource => dataSource
.Ajax()
.Events(o => o.DataBound("onDataBound"))
.PageSize(UIConstants.DefaultPageSizeMax)
.Read(read => read
.Action("GetData", "DataProvider"))
.ServerOperation(false))
)
现在在您的 jquery 中,您将编写您的事件处理程序:
function onRequestEnd(e) {
console.log('onRequestEnd: e.response Object(The raw remote service response) = ', e.response);
console.log('onRequestEnd: e.sender kendo.data.DataSource(The data source instance which fired the event) = ', e.sender);
console.log('onRequestEnd: e.type String (The type of the request) = ', e.type);
}