2012-07-27 42 views
4

我有一个Telerik MVC Grid使用ajax来获取数据,我想控制它何时加载。手动绑定Telerik MVC Grid Ajax

这里是我的看法代码:

@(Html.Telerik().Grid<ViewModels.Reports.UserActionLoggingDetailViewModel>() 
      .Name("UserActionLoggingFollowedGrid") 
      .DataBinding(dataBinding => dataBinding.Ajax().Select("SelectUserActionLogging", "Report", new { userTeamId = Model.UserTeamId, startDate = Model.StartDate, endDate = Model.EndDate }).OperationMode(GridOperationMode.Client)) 
      .Columns(columns => 
         { 
         columns.Bound(x => x.FullName).Hidden(); 
         columns.Bound(x => x.ActionName); 
         columns.Bound(x => x.ActionCount); 
         }) 
      .Pageable(page => page.PageSize(20)) 
      .Sortable() 
      .Groupable(grouping => grouping.Groups(groups => groups.Add(c => c.FullName)).Visible(false)) 
      .Filterable() 
      .Localizable("fr-FR") 
      .HtmlAttributes(new { @class = "grid-style static-grid-style" }) 
      .ClientEvents(e => e.OnError("Grid_onServerError").OnDataBinding("Grid_onDataBinding").OnDataBound("Grid_onDataBound")) 
     ) 

默认情况下,该代码工作正常。加载页面后,网格会自动发送一个发送请求到服务器以执行指定的操作,并使用返回的数据加载它自己。

我想要的是具有相同行为但加载页面时不加载数据的同一个网格;我想要在用户单击按钮或任何其他操作时加载网格。

我发现了一些有趣的帖子,指出如何手动刷新网格,但没有人指定如何防止网格的初始绑定。

回答

0

我认为你可以为网格的DataBinding或DataBound事件添加一个处理程序,并检查它是否是页面的第一次加载。如果是这样,请使用e.preventDefault()以避免调用服务器。

其他选项可能是删除了ajax从电网声明绑定,并使用dataBind method

5

这小片适用于我自己来做。添加数据绑定客户端事件(你已经有了,显然):

.ClientEvents(events => events 
    .OnDataBinding("preventAjaxSelectOnPageLoad")) 

然后创建添加此javascript:

<script type="text/javascript"> 

    var gridsToBind = []; 

    function preventAjaxSelectOnPageLoad(e) 
    { 
     if ($.inArray(e.target.id, gridsToBind) == -1) 
     { 
      e.preventDefault(); 
      gridsToBind.push(e.target.id); 
     } 
    } 
</script> 

基本上,你创建一个数组来跟踪需要的网格绑定。加载页面时,该数组将为空 - 此时,它将取消数据绑定事件并将网格添加到数组中。然后在下一次调用ajaxRequest()时,网格存在于数组中,并且可以正常绑定。