Kendo UI 网格列排序刷新整个页面

Kendo UI Grid column sorting refreshes entire page

我有一个包含两个选项卡的页面。第一个选项卡包含 Kendo 个条形图。选项卡 2 包含一个用于搜索结果的 kendo 网格和两个包含 1 个 kendo 网格的选项卡,每个用于详细信息。搜索结果网格的 "Change" 事件调用 ajax 以使用所选项目的详细信息更新 2 个详细信息网格。我希望 2 个细节网格可以排序。但是,当我单击一列对数据进行排序时,整个页面都会刷新并将我带回到包含 kendo 条形图的第一个选项卡。搜索结果网格是可排序的,并且按预期工作。当我单击要排序的列时,它不会刷新整个页面。那么,如何在不刷新页面的情况下让 2 个详细信息网格恢复?

注意:我还注意到,当屏幕因排序而刷新时,我的控制器操作没有被调用。所以,它刷新了屏幕,但实际上并没有重新执行我的控制器代码——不确定这是否有帮助。

HTML 被 AJAX 呼叫取代:

<div id="groupDetails">
    <div class="panel-body">
        <ul class="nav nav-tabs" id="detailsTabs">
            <li class="active"><a href="#tab-diagnosis" data-toggle="tab">Diagnosis</a></li>
            <li><a href="#tab-procedure" data-toggle="tab">Procedure</a></li>
        </ul>
        <div class="tab-content">
            <div class="tab-pane active" id="tab-diagnosis" />
            <div class="tab-pane" id="tab-procedure" />
        </div>
    </div>
</div>  

搜索结果网格:

 $("#searchResults").kendoGrid({
        dataSource: { data: mdl,},
        selectable: true,
        sortable: true,
        pageable: false,
        change: function(e) {
            var itm = this.dataSource.view()[this.select().index()];
            $.ajax({
                type: "GET",
                url: "@Url.Action("GroupDetails", "Analytics")",
                data: {idx: itm.Idx, name: itm.Name},
                success: function (r) {   
                        groupDetails.html('');                        
                        groupDetails.html(r);
                }
            });
        }
  });

AJAX 结果:

        <div class="panel-body">
    <ul class="nav nav-tabs" id="myTab2">
        <li class="active"><a href="#tab-diagnosis" data-toggle="tab">Diagnosis</a></li>
        <li><a href="#tab-procedure" data-toggle="tab">Procedure</a></li>
    </ul>
    <div class="tab-content">
        <h1>Service Line: @Model.Name</h1>
        <div class="tab-pane active" id="tab-diagnosis">
            @Html.Kendo().Grid(Model.DiagnosisDetailsResults).Name("DiagDetailsResults").Columns(
                column =>
                {
                    column.Bound(c => c.Name).Title("Description");
                    column.Bound(c => c.TotalCharged).Title("Charged").Format("{0:c0}").Width(175);
                    column.Bound(c => c.Totalpayments).Title("Revenue").Format("{0:c0}").Width(175);
                }).Sortable().Scrollable().Selectable(selectable => selectable.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)).DataSource(dataSource => dataSource.Server().Model(model => model.Id(item => item.Idx)))
        </div>


        <div class="tab-pane" id="tab-procedure">
            @Html.Kendo().Grid(Model.ProcedureDetailsResults).Name("ProcedureDetailsResults").Columns(
                column =>
                {
                    column.Bound(c => c.Name).Title("Description");
                    column.Bound(c => c.TotalCharged).Title("Charged").Format("{0:c0}").Width(175);
                    column.Bound(c => c.Totalpayments).Title("Revenue").Format("{0:c0}").Width(175);
                }).Sortable().Scrollable().Selectable(selectable => selectable.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)).DataSource(dataSource => dataSource.Server().Model(model => model.Id(item => item.Idx)))
        </div>
    </div>
</div>

发生这种情况是因为您的详细信息网格都是服务器绑定网格,因此当您尝试对网格进行排序时,当然会向服务器发送请求并刷新页面。如果不想排序刷新页面,需要把数据源改成Ajax

<div class="tab-pane active" id="tab-diagnosis">
    @Html.Kendo().Grid(Model.DiagnosisDetailsResults).Name("DiagDetailsResults").Columns(
        column =>
        {
            column.Bound(c => c.Name).Title("Description");
            column.Bound(c => c.TotalCharged).Title("Charged").Format("{0:c0}").Width(175);
            column.Bound(c => c.Totalpayments).Title("Revenue").Format("{0:c0}").Width(175);
        }).Sortable().Scrollable().Selectable(selectable => selectable.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)).DataSource(dataSource => dataSource.Ajax().ServerOperation(false).Model(model => model.Id(item => item.Idx)))
</div>


<div class="tab-pane" id="tab-procedure">
    @Html.Kendo().Grid(Model.ProcedureDetailsResults).Name("ProcedureDetailsResults").Columns(
        column =>
        {
            column.Bound(c => c.Name).Title("Description");
            column.Bound(c => c.TotalCharged).Title("Charged").Format("{0:c0}").Width(175);
            column.Bound(c => c.Totalpayments).Title("Revenue").Format("{0:c0}").Width(175);
        }).Sortable().Scrollable().Selectable(selectable => selectable.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)).DataSource(dataSource => dataSource.Ajax().ServerOperation(false).Model(model => model.Id(item => item.Idx)))
</div>

顺便问一下,为什么您将 Razor 用于细节网格,而不是主要网格?保持一致。