1

所以,我有以下情形:ASP.NET:Response.BinaryWrite內UpdatePanel內兒童用戶控制

--- Page.aspx ---

UpdatePanel 
    ListView 
     UserControl.ascx 

--- UserControl.ascx - -

ListView 
     Button|ID:btnDownloadAttachment 

我用下面的方法來立即下載附件:

public void OpenDocument(byte[] AttContent, string fileName, string inExtension) 
{ 
    Response.Clear(); 
    Response.ClearHeaders(); 
    Response.ClearContent(); 

    Response.ContentType = "application/pdf"; 

    Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + inExtension); 
    Response.AddHeader("Content-Length", AttContent.Length.ToString()); 
    Response.BinaryWrite(AttContent); 
} 

但由於內容更新面板,我得到以下錯誤內:

「Sys.WebForms.PageRequestManagerParserErrorException:Sys.WebForms.PageRequestManagerParserErrorException:從無法解析服務器收到的消息。」

+0

您無法下載文件通過JAX。 – SLaks 2013-02-25 19:45:15

+0

@SLaks我需要更新面板有反正我可以解決這個問題嗎? – 2013-02-25 20:26:21

+0

不需要您需要回傳。 – SLaks 2013-02-26 00:42:14

回答

4

如果您運行小提琴來查看回復,我猜你會看到你的下載。問題是部分頁面呈現。當客戶端得到它認爲它應該得到一個頁面更新,而不是獲得一個二進制文件。有一對夫婦的解決方案:

選項#1,禁用部分頁面完全渲染頁面(必須page_init完成):

protected void Page_Init(object sender, EventArgs e) 
{ 
    ScriptManager mgr = ScriptManager.GetCurrent(this); 
    mgr.EnablePartialRendering = false; 
} 

選項#2力與控制開始下載回發:

ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(BtnExport); 

選項#3創建一個回傳觸發

<asp:updatepanel id="UpdatePanel1" runat="server"> 
    <triggers> 
     <asp:postbacktrigger ControlID="BtnExport"/> 
    </triggers> 
</asp:updatepanel>