【问题标题】:ASP.NET "application/pdf": code runs only onceASP.NET "application/pdf":代码只运行一次
【发布时间】:2016-07-05 19:21:21
【问题描述】:

我正在开发一个 SharePoint 2013 网站,并且添加了以 PDF 格式保存页面的功能。 PDF 转换由第三方库 SelectPdf 处理。 我设法让一切正常工作(渲染和文件下载),除了我页面上的“PDF 下载”按钮只工作 1 次。意思是,后面代码上的点击事件只会触发一次,无论我点击按钮多少次(请注意,我以 10+ 秒的间隔点击它)。如果我想再次下载 PDF 文件,我必须刷新页面。 为了查明问题,我整理了一个“hello world”示例(见下文):

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 文件”cmets 之间),我仍然得到同样的东西(显然没有生成 PDF)。

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

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

有人遇到过这个问题吗?我在网上看了,但我找不到任何关于它的东西。 我使用的是 Internet Explorer 11 和 Chrome 51。如果您需要更多信息,请告诉我。谢谢。

【问题讨论】:

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


    【解决方案1】:

    您确定单击下载按钮时不会发生 javascript/jquery 错误,从而阻止重新单击 PDF 按钮并进入编辑模式吗? 尤其是刷新页面后,一切都恢复正常了。

    【讨论】:

    • 我启用了中断所有异常的选项(在 IE 中),但我没有看到任何 JavaScript 错误被抛出。我注意到,如果我删除所有响应代码,那么事件就会一直被触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多