我有几个应用程序可以通过浏览器成功显示“标准”文档。我使用互联网上大多数样本使用的常规方式来显示文档,即
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
我想知道是否有任何 OTHER方式从浏览器调用文档,而不是使用Response.write,或者是否有任何方式围绕AJAX / Response。写问题?我希望它们在浏览器中打开,但如果它们在相关的应用程序中打开,那也没关系,大多数情况下,如果不是所有客户都安装了Adobe和MS Office等任何东西。
欢迎任何帮助!
答案 0 :(得分:4)
没有任何其他方法可以在浏览器中调用文档(否则这将是一个巨大的安全问题)。唯一的方法是将下载控件添加为UpdatePanel回发触发器。这会导致完整的回发,并允许浏览器下载和/或激活相关的应用程序。
另一种解决方案可能是使用flash或java applet。
更新:如果您在网格视图内部进行了回发控制,则无需在网格中的所有控件上返回完整的帖子,您始终只能在您需要的控件上触发。在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