当我在我的asp.net应用程序中运行带有参数的报告时,我看到将div加载到无穷大 没有任何错误迹象(所以我不知道如何在谷歌搜索这个问题)
注1: 我可以直接从报表服务器
运行相同的报表注2: 如果我删除了参数,它从asp.net页面和报表服务器
正常运行 protected void Page_Load(object sender, EventArgs e)
{
oID = (Int64)Session["OID"];
ViewReport();
}
public void ViewReport()
{
string reportServerUrl = ConfigurationManager.AppSettings.Get("ReportServerPath");
ReportViewer.ServerReport.ReportServerUrl = new System.Uri(reportServerUrl);
ReportViewer.ServerReport.ReportPath = @"/StoReports/MyReport";
ReportViewer.ServerReport.SetParameters(new ReportParameter("OID", oID.ToString()));
ReportViewer.ServerReport.Refresh();
}
在一个名为Sys $ WebForms $ PageRequestManager $ _endPostBack(错误,执行器,数据)的函数中
工具 sql server Denali,visual studio 2010
答案 0 :(得分:7)
this article explains the issue in details
1-Browser向ASPX页面发出GET请求以获取页面内容 和报告的加载指标。
2-Browser发出POST请求 到ASPX页面获取报告的HTML(此内容位于 UpdatePanel中)。
3-Browser向HTTP处理程序发出GET请求 报告中的所有图像在步骤2中获取报告的请求 content运行ASP.Net页面,包括您放入的任何代码 页面。
为什么这很重要?代码已添加到页面的load事件中 这改变了报告查看器的状态。最常见的例子 我见过的是在load事件中调用SetParameters的用户代码 有几种方法和属性会触发这个。 更改参数值会告诉ReportViewer它需要它 重启报告处理。实际上,它告诉观众返回 到第1步 - 将加载指示器放入浏览器并重新启动 报告处理。如果您在每次回发期间执行此操作,则查看器 永远不会成功完成第2步。它只是进入无限 循环。
调用SetParameters等方法并不便宜。每次通话都触发一次 往返于报表服务器。所以这是你想要最小化的电话 无论如何。通过在初始GET请求期间仅调用SetParameters 或者只有在参数值实际发生变化时,才能改进 应用程序的性能和打破循环。一个简单的 通常在调用SetParameters之前检查IsPostBack 足够的。