c# - 从浏览器打开关联文档(PDF、DOCS 等)

标签 c# asp.net pdf

我有几个应用程序可以通过浏览器成功显示“标准”文档。我使用互联网上大多数示例使用的正常方式来显示文档,即

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ClearContent();
response.ClearHeaders();
response.Buffer = true;
response.ContentType = "application/pdf";
response.AddHeader("Content-Disposition", "attachment;filename=file.pdf"; 
response.BinaryWrite(SomeBinaryArrayObject);
response.Flush();
response.End();

但是,在我当前的应用程序中,这是从 UpdatePanel 调用的,这似乎会导致 AJAX 错误(正如我在谷歌搜索中发现的那样):

Check here for the error message I received

我想知道除了使用 Response.write 之外,是否还有其他方式可以从浏览器调用文档,或者是否有绕过 AJAX/Response 的方式。写问题?我更喜欢它们在浏览器中打开,但如果它们在关联的应用程序中打开,那也很好,大多数(如果不是全部)我们的客户无论如何都安装了 Adob​​e 和 MS Office 之类的东西。

欢迎任何帮助!

最佳答案

没有任何其他方法可以在浏览器中调用文档(否则这将是一个巨大的安全问题)。唯一的方法是将下载控件添加为 UpdatePanel 回发触发器。这会导致完整的回发并允许浏览器下载和/或激活关联的应用程序。

另一种解决方案可能是使用 flash 或 java 小程序。

更新:如果您的回发控件位于 GridView 内,则无需在网格中的所有控件上进行完整的回发,您始终可以仅在需要的控件上触发。在 rowdatabound 事件上,搜索控件并将其添加到触发器,如下所示:

Protected Sub gE_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gE.RowDataBound
    Dim lapt_Trig As New AsyncPostBackTrigger
    lapt_Trig.ControlID = e.Row.FindControl("MyButton").ID     
    up_UpdatePanel.Triggers.Add(lapt_Trig)    
End Sub

关于c# - 从浏览器打开关联文档(PDF、DOCS 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11028206/

相关文章:

c# - 在 C# 中将 Guid 传递给命令行解析器库

c# - 将 DateTime.Now 转换为秒

asp.net - 从 DAL 返回什么到 BLL

image - 使用 iText 将外部图像添加到 PDF

c# - MEF 插件依赖项未加载,因为未检查插件目录

c# - 模型绑定(bind)到 ASP.NET MVC 3 中的枚举

asp.net - 我必须使用 ssl 保护除了几个页面之外的所有页面吗?

c# - 将 CssClass 分配给 MasterPage 中的 LinkBut​​ton

c# - 如何使用 iTextSharp 读取 PDF 表单数据?

c# - 使用 iTextSharp 导出为 PDF 时重复标题行