* Microsoft JScript运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。此错误的常见原因是通过调用Response.Write(),响应过滤器,HttpModules或服务器跟踪来修改响应。 详细信息:在' PNG
附近解析时出错”。*
如果我删除<asp:updatepanel
其工作正常
protected void gvFiles_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Download")
{
byte[] byteArray = item.AttachContent.ToArray();
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + item.AttachFileName + "\"");
Response.AppendHeader("Content-Length", byteArray.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(byteArray);
Response.End();
}
}
答案 0 :(得分:2)
这是因为您正在尝试Response.BinaryWrite
。
您收到此错误是因为您尝试使用不允许的异步回调将非HTML返回到UpdatePanel
。我唯一可以建议的是尝试使用PostBackTrigger
并定位UpdatePanel
之外的控件。
最好的解决方案是让你下载按钮生成另一个调用.ashx
(通用处理程序)的窗口,并通过ashx向二进制文件服务器。您可以附加一个javascript函数来处理点击,这将打开一个新的窗口到ashx,无论需要传递什么参数。
This link提供了有关确切问题及解决方法的更多信息。
有几种方法可以解决这个问题 问题每个修复都有特定的scops。
1.在触发器中注册ButtonDownload PostBackTrigger控件 更新面板的子标记,如图所示 下方。
2.您还可以使用RegisterPostBackControl方法 Page_Load中的ScriptManager控件为 如下所示。
答案 1 :(得分:0)
如错误所述,Response.BinaryWrite
是异步回调期间列入黑名单的活动之一。这是由于UpdatePanel对异步回调期间返回的内容的特殊处理。
我建议将附件下载逻辑移动到单独的页面,HTTP处理程序或服务中,允许使用GET访问它(通过控制查询字符串中的参数),并更改{{1}中的元素从它是什么(Button,ListButton,ImageButton等)到新资源的超链接。通过从单独的资源下载GET,您将避免错误。