繁体   English   中英

带有手动绑定的Telerik MVC Grid Ajax

[英]Telerik MVC Grid Ajax with manually binding

我有一个使用ajax来获取数据的Telerik MVC网格,我想控制何时加载它。

这是我认为的代码:

@(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"))
        )

默认情况下,此代码正常运行。 加载页面后,网格会自动向服务器发送针对指定操作的发布请求,并使用返回的数据进行加载。

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

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

这小块对我有用。 添加一个数据绑定客户端事件(显然已经有):

.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()时,网格存在于数组中并且可以正常绑定。

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

其他选择可能是从Grid声明中删除Ajax绑定,然后使用dataBind方法自己完成

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM