这是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.
强调我的.
注意不要意外选择错误类型的会话状态,但是(启用,禁用,只读).需要正确设置才能使应用程序正常工作.