C# Telerik MVC网格Ajax与手动绑定

C# Telerik MVC网格Ajax与手动绑定,c#,ajax,asp.net-mvc-3,telerik-grid,C#,Ajax,Asp.net Mvc 3,Telerik Grid,我有一个Telerik MVC网格,使用ajax获取数据,我想控制何时加载数据 以下是我认为的代码: @(Html.Telerik().Grid<ViewModels.Reports.UserActionLoggingDetailViewModel>() .Name("UserActionLoggingFollowedGrid") .DataBinding(dataBinding => dataBinding.Ajax().Select(

我有一个Telerik MVC网格,使用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"))
        )
@(Html.Telerik().Grid())
.Name(“UserActionLoggingFollowedGrid”)
.DataBinding(DataBinding=>DataBinding.Ajax().Select(“SelectUserActionLogging”,“Report”,new{userTeamId=Model.userTeamId,startDate=Model.startDate,endDate=Model.endDate}).OperationMode(GridOperationMode.Client))
.列(列=>
{
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))
.可过滤()
.可本地化(“fr”)
.HtmlAttributes(新的{@class=“网格样式静态网格样式”})
.ClientEvents(e=>e.OnError(“Grid_onServerError”).OnDataBinding(“Grid_OnDataBinding”).OnDataBinding(“Grid_OnDataBinding”)
)
默认情况下,此代码工作正常。加载页面时,网格会自动向服务器发送指定操作的post请求,并使用返回的数据加载自身

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


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

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


另一个选择是从网格声明中删除ajax绑定,然后自己使用

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

然后创建并添加以下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>

var gridsToBind=[];
功能预防AJAXSelectionOnPageLoad(e)
{
if($.inArray(e.target.id,gridsToBind)=-1)
{
e、 预防默认值();
gridsToBind.push(e.target.id);
}
}
基本上,您可以创建一个数组来跟踪需要绑定的网格。当页面加载时,数组将为空-此时,它将取消数据绑定事件并将网格添加到数组中。然后,下次调用ajaxRequest()时,网格存在于数组中,可以正常绑定

<script type="text/javascript">

    var gridsToBind = [];

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