Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Telerik MVC网格,真正的Ajax自定义绑定_Asp.net Mvc_Grid_Telerik Mvc - Fatal编程技术网

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。