Asp.net mvc Telerik MVC网格,真正的Ajax自定义绑定
我使用的网格如下所示:Asp.net mvc Telerik MVC网格,真正的Ajax自定义绑定,asp.net-mvc,grid,telerik-mvc,Asp.net Mvc,Grid,Telerik Mvc,我使用的网格如下所示: Html.Telerik().Grid(Model).Name("preciousGrid"). ... bla bla bla.. .ClientEvents(events => events.OnDataBinding("onDataBinding")) .Columns(columns => { columns.Bound(o => o.Date); co
Html.Telerik().Grid(Model).Name("preciousGrid").
... bla bla bla..
.ClientEvents(events => events.OnDataBinding("onDataBinding"))
.Columns(columns =>
{
columns.Bound(o => o.Date);
columns.Bound(o => o.Name);
是的,我完全忽略了使用自定义ajax调用的.DataBinding
功能。为什么?我需要向服务器发送更多数据,而不是简单的id。收集这些数据的唯一方法是遍历DOM元素。因此,Telerik建议的方法都不适用于我的情况
一切都正常-在onDataBinding中,收集必要的数据并发送到服务器后,服务器返回结果,网格显示该数据
但仍然存在一个问题。分页不起作用。页脚显示如下内容:
Html.Telerik().Grid(Model).Name("preciousGrid").
... bla bla bla..
.ClientEvents(events => events.OnDataBinding("onDataBinding"))
.Columns(columns =>
{
columns.Bound(o => o.Date);
columns.Bound(o => o.Name);
有什么想法吗
UPD:哦。。。也许我应该向服务器发送分页信息并返回基于该信息的结果?怎么做?你能给我看看样品吗
UPD2:GridCommand命令默认情况下不会向服务器发送分页信息(如果我在$.ajax中省略它,并且仍然在action方法中添加GridCommand参数,它会向控制器发送一些内容,但PageSize始终等于10(默认值),并且页面总是1。所以我想我必须硬编码地将这些值包含在$.ajax中。但我不知道如何在客户端上获取页面大小和页面值?如果要进行自定义数据绑定,则必须自己处理分页和排序,如下所示。这非常合理
[GridAction(EnableCustomBinding = true)]
public ActionResult _Index(GridCommand command)
{
IEnumerable<MyObject> data = GetData(command.Page - 1, command.PageSize);
int count = GetDataCount();
return View(new GridModel { Data = data, Total = count });
}
好的……显然,您可以真正定制ajax绑定 您必须定义数据绑定,尽管它不会被网格使用,但您需要它才能使网格可分页
.DataBinding(binding => binding.Ajax().Select("GetList","Home")) // Although I guess you can put whatever here
.ClientEvents(events => events.OnDataBinding("Grid_onDataBinding"))
接下来,在Grid\u onDataBinding
javascript函数中,您必须执行类似的操作
var grid = $('#ConflictsGrid').data('tGrid');
$.ajax({
url: "GetList",
contentType: 'application/json; charset=utf-8',
type: "GET",
data: {
page: JSON.stringify({currentPage: grid.currentPage, pageSize: grid.pageSize }),
// any other data you want to send to the server
},
success: function (data) {
grid.dataBind(data); // Here, the data that server returns will be actually bound to the grid
},
是的..我发现了…我只需添加JsonRequestBehavior.AllowGet,您的方法是正确的。谢谢您唯一困扰我的是,GridCommand总是发送PageSize 10,即使您在我发布的关联视图中覆盖了它。我不确定您为什么要绑定ondatabound事件。请参阅。DataBinding()方法。Brett我不能使用Ajax()。选择,我必须将数据发送到服务器,我只能通过遍历DOM元素才能获得这些数据!+1魔鬼在细节中。感谢回答@Brett。我忘了设置EnableCustomBinding。