ASP.NET:Response.BinaryWrite内UpdatePanel内儿童用户控制
问题描述:
所以,我有以下情形: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:从无法解析服务器收到的消息。”
答
如果您运行小提琴来查看回复,我猜你会看到你的下载。问题是部分页面呈现。当客户端得到它认为它应该得到一个页面更新,而不是获得一个二进制文件。有一对夫妇的解决方案:
选项#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>
您无法下载文件通过JAX。 – SLaks 2013-02-25 19:45:15
@SLaks我需要更新面板有反正我可以解决这个问题吗? – 2013-02-25 20:26:21
不需要您需要回传。 – SLaks 2013-02-26 00:42:14