【问题标题】:Open associated documents (PDFs, DOCS, etc) from Browser从浏览器打开相关文档(PDF、DOCS 等)
【发布时间】:2012-06-14 07:02:08
【问题描述】:

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

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 之类的东西。

欢迎任何帮助!

【问题讨论】:

    标签: c# asp.net pdf


    【解决方案1】:

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

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

    更新:如果您的回发控件位于网格视图中,则无需对网格中的所有控件进行完整回发,您始终可以仅在需要它的控件上触发。在 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
    

    【讨论】:

    • 您好 Arjun,谢谢我尝试了您的建议,但由于下载控件位于 GridView 的 ItemTemplate 中,因此在绑定触发器时它似乎并不“存在”,我得到一个错误。我将不得不查看替代方案,也许将我的 GridView 移出更新面板,以便它可以导致定期回发。谢谢!
    • [已解决] 我进一步采纳了您的建议,并使用我的整个 GridView 作为回发触发器,这很有效,感谢您的建议,Arjun!所以我这样做了:
    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多