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

前端之家收集整理的这篇文章主要介绍了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”.

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

猜你在找的asp.Net相关文章