ASP.NET Response.Rewrite首先没有生效

时间:2011-07-20 00:16:53

标签: c# asp.net iis

编辑:问题解决了。感谢大家的建议。

使用商业产品将指定页面打印为PDF。

系统的工作方式是加载PrintToPDF.aspx页面,并通过post参数提交要转换的页面的详细信息。

Page_Loaded函数使用wkHtmlToPdf创建PDF文件,然后使用Response.Write编写新页面以加载该PDF文件,如下所示:

Response.Clear();
Response.Write("<html><body onload=\"parent.OpenPDF('tmp/" + Path.GetFileName(sPdfFile) + "');\"></body></html>");

默认情况下,.aspx页面包含以下代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PrintToPdf.aspx.cs" Inherits="DataServer.PrintToPdf" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>X-Info Maps Print to PDF</title>
    </head>
    <body onload="alert('An error occurred generating the pdf');">
    </body>
</html>

所以,应该发生什么是生成PDF(这是正常的),然后重写页面的HTML响应以通过附加到onload事件的Javascript调用来加载PDF。

INSTEAD,无论如何,默认页面的警报触发。我已经遍历了程序,它肯定会调用Response.Clear()和.Write()函数。

有趣的是,在第一次失败后,如果我第二次按下printToPdf按钮,它会正确加载PDF页面。

关于出了什么问题的任何暗示?

3 个答案:

答案 0 :(得分:3)

最后你需要一个Response.End()

编辑 - 所以你的代码应该是这样的:

Response.Clear();
Response.Write("<html><body onload=\"parent.OpenPDF('tmp/" + Path.GetFileName(sPdfFile) + "');\"></body></html>"); 
Response.End();

答案 1 :(得分:0)

因此,事实证明存在一个单独的问题导致代码分支无法运行。 (我忘记在运行wkHtml2PDF = S的过程中包含WaitForExit)

答案 2 :(得分:0)

将该response.write代码从page_load移至page_prerender事件。它应该工作。