在对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包并回到我的第一次尝试。然后在每次重新加载面板时手动设置网格。
答案 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包并重新连接每个面板更新的网格功能。两种解决方案都很薄弱。