0

我有一个性能问题,我们有一个 2 页设置作为更大系统中工作流程的一部分。本节专门用于呈现报告,允许用户选择自己的参数。

Page1.aspx收集报告的参数信息。它获取表单上提交的信息并对其进行验证。如果验证成功,它将选择作为 XML 存储在 DB 中,然后Page2.aspx使用查询字符串中的运行 ID 重定向到。很简单,性能很棒。

Page2.aspx从数据库中提取 ID 并水合一个 CrystalReportDocument对象(需要几毫秒),然后我们调用ExportToHttpStream它,然后将报告呈现为 PDF 或 DOC 或 XLS 下载(输出格式在 中确定Page1.aspx)。由于我们的报告编写方式和目标系统上的数据库索引,该方法的性能ExportToHttpStream非常差。目前这超出了我的控制范围,但我保证他们正在处理中。

所以问题是,当Page1.aspx按下提交按钮时,用户在下载开始之前会经历很长的延迟。然后,用户再次按下提交按钮认为存在问题,从而使情况更加复杂。

我认为我需要做的是Page1.aspx重定向到Page2.aspx. Page2.aspx应该渲染母版页家具和加载div,并且报告应该在自动弹出保存对话框之前在后台以某种方式异步渲染,之后我想将加载 div 更改为“生成报告,单击此处返回'。

如果这是实现这一目标的最佳方式,我如何加载整页,然后异步请求报告?我愿意接受任何建议。

4

3 回答 3

1

您可以使用 ajax 加载报告Page2.aspx并在处理时显示加载消息。

jQuery.load()方法。这可能是完成您正在尝试做的事情的最简单方法。

Page1.aspx- 收集参数
Page2.aspx- 报告视图,Page2Details.aspx通过 ajax 调用。

于 2012-08-29T14:26:14.587 回答
0

尝试Page2.aspx在里面加载iframe并使用jQuery显示等待指示器并在Page2.aspx下载后将其隐藏

于 2012-08-29T14:25:29.470 回答
0

虽然这两个答案都给了我一些基础,让我走出去并朝着正确的方向进行研究。我的解决方案包括使用fileDownloadJohn Culviner 的插件来促进类似的解决方案:

jQuery 文件由 John Culviner 下载

这允许我使用以下页面结构:

  1. Page1.aspx,收集和验证报告的参数并将它们放入 Oracle。
  2. Page2.aspxdiv, 同时通过查询字符串 setup 3 hidden s传入 runid(指向数据库中参数的指针) 。加载、错误和成功。

此时使用了上面提到的脚本。jQuery 首先设置加载div可见然后调用插件。该插件动态创建iframe并从Page3.aspx. 然后它会触发成功回调或失败。成功回调是通过在响应末尾设置的 cookie 触发的Page3.aspx

我相信插件提到在 jQuery 中使用'text/plain'AJAX 调用进行下载,避免了在 AJAX 中没有等效八位字节流的限制。

它可以工作,无论如何它都不是最干净的解决方案,它不会降低任何性能,而是为我们控制的 Intranet 上的用户提供响应速度极快且令人愉悦的 UI。

于 2012-08-31T19:11:49.493 回答