2012-06-14 38 views
2

我有幾個應用程序可以通過瀏覽器成功顯示'標準'文檔。我使用的是互聯網上的大多數樣品使用,以便顯示文檔的正常方式,即從瀏覽器打開相關文檔(PDF,DOCS等)

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.Write的問題?我更喜歡他們在瀏覽器中打開,但如果他們在關聯的應用程序中打開,那也可以,但大多數(如果不是全部)我們的客戶端在任何情況下都安裝了Adobe和MS Office。

任何幫助將受到歡迎!

回答

4

沒有任何其他方式可以在瀏覽器中調用文檔(否則這將是一個巨大的安全問題)。唯一的解決方法是將您的下載控件添加爲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 
+0

阿瓊您好,謝謝,我想你的建議,但由於下載控制是在GridView的一個ItemTemplate,它不在觸發器被綁定時似乎'存在',我得到一個錯誤。我將不得不考慮替代方案,也許將我的GridView移出updatepanel,以便它可以導致定期回發。謝謝! –

+0

[已解決]我把你的建議稍微提了一點,並使用我的整個GridView作爲回發觸發器,並且這個工作,感謝你的建議,Arjun! 所以,我沒有這樣的: