首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复在ASP.NET MVC中向多个用户显示同一报表的ReportViewer?

如何修复在ASP.NET MVC中向多个用户显示同一报表的ReportViewer?
EN

Stack Overflow用户
提问于 2019-01-31 23:43:41
回答 3查看 659关注 0票数 3

我已经用ASP.NET MVC写了一个生成各种财务报告的系统。每个报表都在它自己的控制器中,每个控制器都有自己的“报表”操作。该操作在ViewBag中呈现带有报表的局部视图,并将其传递给前端的javascript,并将呈现的元素放在JQueryUI对话框中。

一个用户可以运行资产负债表报告,然后另一个用户可以运行损益表报告,在第一个用户运行资产负债表报告而不是查看损益表之后,第二个用户看到资产负债表。

这是将报告作为JSON对象返回的代码

代码语言:javascript
复制
 //Initialize report and add datasources etc.
 reportViewer.LocalReport.Refresh();
 ViewBag.ReportViewer = reportViewer;

 return Json(JsonResponse.Success(RenderRazorViewToString("PrintVoucher", null)));

这是局部视图

代码语言:javascript
复制
@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>

任何建议或指导都将不胜感激!

EN

回答 3

Stack Overflow用户

发布于 2020-05-15 00:05:31

我们遇到了同样的问题,似乎与ReportViewerForMvc中的并发错误有关。偶然发现了这个旧的github链接,其中有信息和建议的修复。希望这能有所帮助。

https://github.com/nrifath2009/ReportViewerForMvc/pull/1

票数 2
EN

Stack Overflow用户

发布于 2019-02-01 00:03:44

尝试使您的局部视图成为"reportViewer“的强类型视图,在@Html.ReportViewer()中使用它,而不是在视图包中。

之后,转到返回该部分视图的代码,并在返回时将其设置为返回Json(JsonResponse.Success(RenderRazorViewToString("PrintVoucher",reportViewer));

票数 0
EN

Stack Overflow用户

发布于 2020-05-14 04:38:02

  1. 确保您的操作没有OutputCache属性,以确保服务器始终为每个请求计算新报告,或者在属性强类型模型上设置VaryByParam,而不是在每次调用时设置ReportViewer的新对象,而不是使用单个静态对象。
    1. 在控制器操作上使用PartialView并将报告对象传递给PartialView,Razor引擎将使用模型处理部分视图,并生成一个OutputCache标记作为json调用的返回。

    <代码>G214

这里是控制器和视图的工作示例(我使用Bootbox而不是JqueryUI)

控制器:

代码语言:javascript
复制
[HttpPost, ValidateAntiForgeryToken]
public PartialViewResult Report(/*Pass Optional Parameters If Required*/)
{
    var reportViewer = new ReportViewer();
    //reportViewerInitialization
    return PartialView("PrintVoucher", reportViewer);
}

用于加载报表视图的JavaScript方法

代码语言: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

代码语言:javascript
复制
@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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54464211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档