ASP.NET“application/pdf”:代码只运行一次
我正在使用SharePoint 2013网站,并添加了以PDF格式保存网页的功能。 PDF转换由第三方库SelectPdf处理。 除了在我的页面上使用的“PDF下载”按钮只能执行一次外,我设法让所有内容都能正常工作(渲染和文件下载)。意思是,无论我点击多少次按钮(注意,我以10+秒的间隔点击它),后面的代码上的点击事件只会触发一次。如果我想再次下载PDF文件,我必须刷新页面。 我放在一起的“Hello World”的例子(见下文),以查明问题:ASP.NET“application/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)。
我注意到,我最多可以成功点击2次“下载”按钮(这很少见,也不一致):第三次没有任何反应。
虽然这不是一个大问题,但我认为我看不到有什么问题。这是为什么:在我点击“下载”按钮(并获取我的PDF文件)后,我无法继续在我的SharePoint页面中进行编辑模式。 “加载”消息不断旋转,但没有任何反应(再次,除非我刷新页面)。
有没有人有这个问题?我在网上查找,但我无法找到任何有关它。 我使用Internet Explorer 11和Chrome 51.请让我知道是否需要更多信息。谢谢。
当下载按钮被点击时,你确定没有javascript/jquery错误发生,以防止重新点击PDF按钮,并进入编辑模式? 尤其是因为刷新页面会使所有的工作重新开始。
我启用了打破所有异常(在IE中)的选项,但我没有看到任何JavaScript错误被抛出。我注意到如果我删除了所有的响应代码,那么事件就会一直被触发。 – Frederic