我已经用ASP.NET MVC写了一个生成各种财务报告的系统。每个报表都在它自己的控制器中,每个控制器都有自己的“报表”操作。该操作在ViewBag中呈现带有报表的局部视图,并将其传递给前端的javascript,并将呈现的元素放在JQueryUI对话框中。
一个用户可以运行资产负债表报告,然后另一个用户可以运行损益表报告,在第一个用户运行资产负债表报告而不是查看损益表之后,第二个用户看到资产负债表。
这是将报告作为JSON对象返回的代码
//Initialize report and add datasources etc.
reportViewer.LocalReport.Refresh();
ViewBag.ReportViewer = reportViewer;
return Json(JsonResponse.Success(RenderRazorViewToString("PrintVoucher", null)));这是局部视图
@using ReportViewerForMvc;
<div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">
@Html.ReportViewer(ViewBag.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)
</div>任何建议或指导都将不胜感激!
发布于 2020-05-15 00:05:31
我们遇到了同样的问题,似乎与ReportViewerForMvc中的并发错误有关。偶然发现了这个旧的github链接,其中有信息和建议的修复。希望这能有所帮助。
发布于 2019-02-01 00:03:44
尝试使您的局部视图成为"reportViewer“的强类型视图,在@Html.ReportViewer()中使用它,而不是在视图包中。
之后,转到返回该部分视图的代码,并在返回时将其设置为返回Json(JsonResponse.Success(RenderRazorViewToString("PrintVoucher",reportViewer));
发布于 2020-05-14 04:38:02
OutputCache属性,以确保服务器始终为每个请求计算新报告,或者在属性强类型模型上设置VaryByParam,而不是在每次调用时设置ReportViewer的新对象,而不是使用单个静态对象。PartialView并将报告对象传递给PartialView,Razor引擎将使用模型处理部分视图,并生成一个OutputCache标记作为json调用的返回。<代码>G214
这里是控制器和视图的工作示例(我使用Bootbox而不是JqueryUI)
控制器:
[HttpPost, ValidateAntiForgeryToken]
public PartialViewResult Report(/*Pass Optional Parameters If Required*/)
{
var reportViewer = new ReportViewer();
//reportViewerInitialization
return PartialView("PrintVoucher", reportViewer);
}用于加载报表视图的JavaScript方法
function showReport(reportControllerName)
{
var dialog = bootbox.dialog({
message: '<p><i class="fa fa-spin fa-spinner"></i> Loading...</p>'
});
$.ajax({
type: "POST",
url: '/'+ reportControllerName +'/Report/',
data: {/*DataPassed To The Report Action*/},
success: function (data) {
//data Field will contain an Html markup resulted from razor engine process for PrintVoucher PartialView
dialog.find('.bootbox-body').html(data);
}
});
}PrintVoucher.cshtml
@using ReportViewerForMvc;
<div class="container">
<div class="row">
<div class="col-md-12 col-lg-12 col-sm-12 col-xs-12">
@Html.ReportViewer(Model as Microsoft.Reporting.WebForms.ReportViewer)
</div>
</div>
</div>https://stackoverflow.com/questions/54464211
复制相似问题