打开附件

时间:2010-08-20 20:31:45

标签: asp.net webforms updatepanel

* 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();
    }
}

2 个答案:

答案 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,您将避免错误。