我有一个.aspx页面,使用ReportViewer控件生成报告。它通常使用Response.Redirect从另一个页面调用。
此页面可以多种方式使用。只要页面生成响应(例如MIME附件),它就会按预期工作。但是,现在我添加了生成报告并将其作为电子邮件附件发送的功能。在这种情况下,页面是无头的,并不会自己产生响应。相反,我想重定向回调用页面并显示成功消息,如:
来电者页面 - >按钮单击 - > Response.Redirect(报告页面) - >流程报告 - > Response.Redirect(来电者页面)
这适用于Chrome,但不适用于IE(8)。处理报告并发送电子邮件,但第二次重定向不起作用,浏览器超时。我考虑使用Server.Transfer重定向到ReportViewer页面。在IE中仍然出现超时。
一个请求中是否有2个重定向?我错过了什么,有没有更好的方法来做到这一点? 引用RFC1945让我觉得这种方法应该没问题:
用户代理永远不应该自动进行 重定向请求超过5次,因为这种重定向通常 表示无限循环。
仅供参考,我希望尽可能将所有报告处理逻辑保留在ReportViewer页面的代码隐藏中,因为它会在报告流回浏览器的正常情况下与Response对象进行交互。
答案 0 :(得分:0)
我可以提出另一种方法吗? 来电者页面 - >按钮单击 - > POST - >流程报告 - > GetRequestStream(即“OK / Error”) - >做点什么
答案 1 :(得分:0)
对此的修复是相当平凡的。呈现报告并将其写入文件的方法执行了Response.ClearContent()。这是我从需要的不同应用程序中带来的现有代码。一旦我删除了呼叫,后续的重定向就开始在IE中工作了。
最终解决方案如下:
来电者页面 - >按钮单击 - >验证 - > Server.Transfer(报告页面) - >流程报告 - > Response.Redirect(来电者页面)
来电者页面会刷新并显示成功消息。