2011-04-08 73 views
0

後,我有一個UpdatePanel,顯示文件列表的GridView控件。 GridView中的一列是一個打開列出的PDF文件的按鈕。的UpdatePanel退出響應Response.TransmitFile

<asp:UpdatePanel runat="server" ID="upPurchaseOrder"> 
    <ContentTemplate> 
     <asp:GridView ID="gvPurachaseOrder" runat="server" AutoGenerateColumns="False" DataSourceID="odsPurchaseOrders" 
      EnableModelValidation="True" DataKeyNames="PurchaseOrderID,PromotionID" onrowcreated="gvPurachaseOrder_RowCreated"> 
      <Columns> 
       <%--BoundFields omitted--%> 
       <asp:TemplateField ShowHeader="False"> 
        <ItemTemplate> 
         <asp:Button ID="btnPurchaseOrderOpen" runat="server" Text="Open" CommandName="Open" 
          CommandArgument='<%# Eval("FilePath") %>' oncommand="btnPurchaseOrderOpen_Command" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

在RowCreated事件我寄存器btnPurchaseOrderOpen作爲回發控制,所以它會導致完全回發。

在按鈕的事件處理程序,我打開與Response.TransmitFile方法的文件。

Response.Clear(); 
Response.ContentType = GetConentTypeForFile(fi.Extension); 
Response.AddHeader("content-disposition", String.Format("attachment;filename={0}", fi.Name)); 
Response.TransmitFile(fi.FullName); 
Response.End(); 

我的問題是,文件打開後(它正確打開)UpdatePanel停止更新。我可以點擊其他按鈕,他們從來沒有回來後同步或異步。我有一種感覺,這個問題是關係到迴應,但我不知道如何解決它。

回答

1

你正在做一個完整的回帖,但你沒有返回任何新的頁面到服務器,因爲你只是在做transmitfile,然後response.end。這基本上是你的頁面的死衚衕。你可能想要解決這個問題的方法是在iframe中完整地回發或者直接創建一個到下載文件的鏈接,即使這可能是一個ashx處理程序,你仍然可以繼續擁有類似的邏輯已經在使用。