Asp.net ReportViewer正在阻止其他功能,直到报表查看器加载完成
这是ReportViewer控件:Asp.net ReportViewer正在阻止其他功能,直到报表查看器加载完成,asp.net,.net,asp.net-mvc,reportviewer,Asp.net,.net,Asp.net Mvc,Reportviewer,这是ReportViewer控件: <form id="reportForm" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="360000"> </asp:ScriptManager> <div> <rsweb:ReportViewer ID="mainReportV
<form id="reportForm" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="360000">
</asp:ScriptManager>
<div>
<rsweb:ReportViewer ID="mainReportViewer" runat="server" Width="100%"
Height="100%" SizeToReportContent="True" >
</rsweb:ReportViewer>
</div>
</form>
当我尝试查看报告(asp.net mvc中的一个视图)时,它会在一个新选项卡中打开以查看报告(这是带有代码文件的aspx页面),而如果我尝试从上一个选项卡打开任何链接,则在新选项卡中的报告完全加载之前,页面不会加载。我什么都试过了,但还没有找到解决办法。需要帮助吗
也就是说,如果我试图打开上一个选项卡中的任何链接,直到新选项卡中的报告完全加载,页面才会加载
您需要分析您的应用程序。您的请求很可能已排队,试图为用户的会话状态获取写锁
您可以阅读有关此问题的更多信息:
为了防止两个页面同时修改进程内会话变量,ASP.NET运行时使用锁。当对读取和写入会话变量的页面的请求到达时,运行时将获取一个writer锁writer锁将阻止同一会话中可能写入同一会话变量的其他页面。
我的
为了缓解这种情况
但是,请注意不要意外地选择了错误类型的会话状态(已启用、已禁用、只读)。您的应用程序需要正确设置才能正常工作。您能试试吗
System.Threading.Thread thLoadReport = new System.Threading.Thread(new System.Threading.ThreadStart(LoadReport));
thLoadReport.Start();
private void LoadReport()
{
// Invoke necessary controls here for eg.
mainReportViewer.Invoke((MethodInvoker)delegate {
// your report loading here
});
}
如果您需要更多帮助,请告诉我。由于ReportViewer用户的会话状态持续存在,因此它使用了一个锁来阻止页面加载。我采用的解决问题的方法是:
- 创建
并实现类
IReportServerConnection2
接口
到add key=“ReportViewerServerConnection”value=“MyNamespace.MyClass,MyAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=00000000000000000”/>
中的
文件中,这是否被错误标记为mvc问题?Runat:服务器和代码隐藏不是mvc框架的一部分。正如我前面提到的,aspx页面添加到我的mvc项目中。查看报告的链接位于mvc查看页面中,报告本身通过aspx页面打开,以使用报告查看器控件。简言之,我的mvc应用程序中集成了一个aspx/aspx.cs页面来查看报表禁用或readonly无法使用报表查看器。它没有获取数据和错误您无法禁用它,因为您使用它:web.config
如果(会话[“UserInfo”]==null)如我所说,不要选择错误的类型。那么如何进一步?加载报告需要时间,而加载其他链接则会被阻止,直到报告完成。我的应用程序是在asp.net MVC中开发的,但报告部分是使用aspx/aspx.cs页面创建的。我解决了问题,找到了一些要点。您认为这个由报表查看器自动生成的javascipt可能导致了这个问题吗?有很多javascript是这样的:通过分析,你的意思是改变应用程序?我有点陷入其中,不知道如何继续。这些应用程序将显示您的网站在哪里花费时间,这将确认您是否在会话状态方面有问题简要教程:没有调用方法w.r.t mainReportViewer
System.Threading.Thread thLoadReport = new System.Threading.Thread(new System.Threading.ThreadStart(LoadReport)); thLoadReport.Start(); private void LoadReport() { // Invoke necessary controls here for eg. mainReportViewer.Invoke((MethodInvoker)delegate { // your report loading here }); }