asp.net – ReportViewer阻止其他功能,直到报告查看器的加载完成

这是ReportViewer控件:
<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>

这是页面背后的代码

protected void Page_Load(object sender,EventArgs e)
{
    if (Session["UserInfo"] == null)
    {
        Response.Redirect("~/account/login",true);
    }
    string ReportPath = "";
    try
    {
        if (mainReportViewer.Page.IsPostBack) return;

        mainReportViewer.ProcessingMode = ProcessingMode.Remote;

        mainReportViewer.ServerReport.reportserverUrl = new Uri(
            @"" + ConfigurationManager.AppSettings["reportserver"].ToString()
        );
        ReportPath = Convert.ToString(ConfigurationManager.AppSettings["ReportPath"]);
        if (!string.IsNullOrEmpty(ReportPath))
        {
            if (ReportPath.Substring(0,1) == "/")
            {
                ReportPath = ReportPath.Substring(1,ReportPath.Length - 1);
            }
            if (ReportPath.Substring(ReportPath.Length - 1,1) != "/")
            {
                ReportPath = ReportPath + '/';
            }
        }
        else
        {
            ReportPath = "";
        }
        ReportPath = ReportPath + Request["Report"].ToString().Split(".".tochararray())[0].ToString();
        mainReportViewer.ServerReport.ReportPath = @"/" + ReportPath;

        ReportParameterCollection parmCol = new ReportParameterCollection();
        string sFrom = "";
        string sTo = "";
        string daterange = Request["daterange"].ToString();
        string[] obj = daterange.Split("-".tochararray());
        if (obj.Length > 1)
        {
            sFrom = obj[0].ToString();
            sTo = obj[1].ToString();
        }
        else
            sFrom = obj[0].ToString();
        else if (Request["Report"].ToString().toupper() == "SOURCEWISEREPORT_AR.RDL")
        {
            string[] frommonthyear = sFrom.Split(',');
            string[] tomonthyear = sTo.Split(',');

            parmCol.Add(new ReportParameter("FromYear",frommonthyear[1]));
            parmCol.Add(new ReportParameter("FromMonth",frommonthyear[0]));
            parmCol.Add(new ReportParameter("ToYear",tomonthyear[1]));
            parmCol.Add(new ReportParameter("ToMonth",tomonthyear[0]));
            parmCol.Add(new ReportParameter("lang",Convert.ToString(Session["Culture"])));
        }
        mainReportViewer.PromptAreaCollapsed = true;
        mainReportViewer.AsyncRendering = true;
        mainReportViewer.ServerReport.Timeout = System.Threading.Timeout.Infinite;
        mainReportViewer.ServerReport.SetParameters(parmCol);
        mainReportViewer.ShowParameterPrompts = true;
        mainReportViewer.LocalReport.EnableHyperlinks = true;
        mainReportViewer.ServerReport.Refresh();
    }
    catch (Exception ex)
    {
        CommonFunctions.createLog("Reports : " + ex.Message);
    }
}

当我尝试查看报告(这是asp.net mvc中的视图)时,它会在新选项卡中打开以查看报告(这是带有代码文件的aspx页面),并且如果我尝试打开上一个选项卡中的任何链接,则表示在完全加载新选项卡中的报表之前,页面不会加载.我尝试了所有事情,但尚未找到解决方案.需要帮忙

解决方法

mean while if i try to open any link from the prevIoUs tab the page doesn’t get loaded until the report in the new tab is completely loaded

您需要分析您的应用程序.很可能您的请求已排队,试图获取用户会话状态的写锁定.

您可以阅读有关问题here的更多信息:

To prevent two pages from modifying in-process Session variables at the same time,the ASP.NET runtime uses a lock. When a request arrives for a page that reads and writes Session variables,the runtime acquires a writer lock. The writer lock will block other pages in the same Session who might write to the same session variables.

强调我的.

为了缓解这种情况,you can enable or disable session state for individual pages,or declare your usage of session state as “read only”.

注意不要意外选择错误类型的会话状态,但是(启用,禁用,只读).需要正确设置才能使应用程序正常工作.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....