mvc grid ajax,网格更新但是部分视图不是

时间:2016-11-21 09:35:16

标签: c# ajax asp.net-mvc grid

在对C#Web应用程序进行维护时,我遇到了MVC Grid。 我的一个视图有4个面板,每个面板都有一个包含大量数据的网格。出于性能原因,我希望能够使用AJAX单独更新每个面板。

在我的第一次尝试中,我(重新)使用AJAX手动加载了面板。我注意到网格丢失了它的javascript功能。

所以在我的第二次尝试中,我安装了Grid.Mvc.Ajax。 现在网格已更新,其功能仍然完好,但我遇到了以下问题,我无法轻易解决:

网格已更新,但其周围的面板未更新,而您实际上必须指定包含要更新的网格的(部分)视图。 AjaxGrid.cs包含以下方法:

    public string ToJson(string gridPartialViewName, Controller controller)
    {
        var htmlHelper = new KlaHtmlHelpers();
        return htmlHelper.RenderPartialViewToString(gridPartialViewName, this, controller);
    }

为了直观地证明部分没有被更新,我在网格上面添加了一个日期时间输出。网格刷新日期时间不是。

@using GridMvc.Html
@model Grid.Mvc.Ajax.GridExtensions.AjaxGrid<ReportInReviewViewModel>
<p>@string.Format("{0}",DateTime.Now)</p>
@Html.Grid(Model).Named("reportNumbersGridInReview").Columns(columns =>
                        {
                            columns.Add(reportsinreview => reportsinreview.ReportNumber)
                            .Titled("Report number")
                            .Filterable(true)
                            .Sortable(true);
                    }).SetRowCssClasses(reportsinreview => "row_" + reportsinreview.ReportNumber).SetRowCssClasses(reportsinreview => (reportsinreview.IsAmber ? "amber" : string.Empty) + (reportsinreview.IsRed ? "red" : string.Empty))

如果只有我可以用一些htmlAttributes或其他东西来丰富网格,那么我可以使用该数据更新整个面板。网格上方显示的汇总数据非常有限。

pageGrids.reportNumbersGridInReview.onGridLoaded(function (e) {
    updatePanelData();
});

以前有没有人处理过这个问题?你是怎么解决的? 解决此问题的最佳做法是什么?

此时我绝望了。我正在考虑整个删除grid.mvc.ajax包并回到我的第一次尝试。然后在每次重新加载面板时手动设置网格。

1 个答案:

答案 0 :(得分:0)

这不是一个公认的答案,而是一种解决方法:

在控制器方法中设置Session:

    [HttpGet]
    [AjaxOnly]
    public ActionResult GetReportsInReviewGrid(int? page)
    {
        //Putting the totals model in Session is a hack, because grid.mvc.ajax will only upload the grid, not the panel.
        var items = GetReportInReviewViewModels();
        Session[STATUSPANELTOTALSINREVIEW] = GetStatusPanelTotalsViewModel(items); //(items); 

        return GetReportsGrid(items, GRIDREPORTSINREVIEW_PARTIAL_PATH);
    }

然后onGridLoaded从Session:

中检索数据
pageGrids.reportNumbersGridInReview.onGridLoaded(function (e) {
    UpdateStatusPanelTotalsInReview();
});

相应的控制器方法:

    [HttpGet]
    [AjaxOnly]
    public PartialViewResult GetStatusPanelTotalsInReview()
    {
        var model = Session[STATUSPANELTOTALSINREVIEW];
        return PartialView("Partials/_StatusPanelTotals", model);
    }

这是一种有效的解决方法。但当然,这是荒谬和丑陋的。 grid.mvc.ajax应该只更新整个部分视图而不仅仅是网格。

如前所述:我不妨删除grid.mvc.ajax包并重新连接每个面板更新的网格功能。两种解决方案都很薄弱。