ASP.NET“application / pdf”:代码只运行一次

时间:2016-07-05 19:21:21

标签: asp.net pdf-generation sharepoint-2013

我正在使用SharePoint 2013网站,并且我添加了以PDF格式保存网页的功能。 PDF转换由第三方库SelectPdf处理。 我设法让一切工作(渲染和文件下载),除了我的页面上的“PDF下载”按钮只能工作一次。意思是,无论我点击多少次按钮(注意我以10秒以上的间隔点击它),后面的代码上的click事件只被触发一次。如果我想再次下载PDF文件,我必须刷新页面。 我把一个“你好世界”的例子(见下文)放在一起,以便找出问题所在:

protected void lnkPdfDownload_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=test.pdf");

    /************************************ Create PDF File ************************************/
    string html = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
                    <html dir=""ltr"" lang=""en-US"">
                    <body><h1>Hello World</h1></body>
                    </html>";
    HtmlToPdf converter = new HtmlToPdf();
    PdfDocument doc = converter.ConvertHtmlString(html);
    byte[] bytes = doc.Save();
    Response.OutputStream.Write(bytes, 0, bytes.Length); // ALTERNATIVE: doc.Save(Response.OutputStream);
    /************************************ Create PDF File ************************************/

    //Response.End(); // This throw a ThreadAbortException, therefore I'm using the alternative code below
    Response.Flush();
    Response.SuppressContent = true;
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

一开始我认为是Response.End()引起了问题(通过抛出ThreadAbortException),但是我用其他代码替换了它,我仍然遇到同样的问题(现在没有抛出异常)。

我不认为问题出在SelectPdf库中:我可以注释掉整个块(在“创建PDF文件”注释之间),我仍然得到相同的东西(显然没有生成PDF)。 / p>

我注意到,最多,我可以成功点击“下载”按钮最多2次(很少见,并且不一致):第三次没有任何反应。

虽然这不是什么大不了的事,但我认为有一些错误,我没有看到。原因如下:点击“下载”按钮(并获取我的PDF文件)后,我无法在SharePoint页面中进入编辑模式。 “加载”消息一直在旋转,但没有任何反应(再次,除非我刷新页面)。

有人有这个问题吗?我在网上看了,但我找不到任何关于它的信息。 我正在使用Internet Explorer 11和Chrome 51.如果您需要更多信息,请与我们联系。谢谢。

1 个答案:

答案 0 :(得分:0)

您是否确定在单击下载按钮时没有发生javascript / jquery错误,这会阻止重新单击PDF按钮并进入编辑模式? 特别是因为刷新页面会让一切都恢复正常。