【问题标题】:opening an attachment in <ASP: UpdatePanel throw this error在 <ASP: UpdatePanel 中打开附件会引发此错误
【发布时间】:2011-04-01 20:53:50
【问题描述】:

*Microsoft JScript 运行时错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器接收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或启用了服务器跟踪来修改响应。 详细信息:'�PNG

附近的解析错误

'.*

如果我删除 &lt;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();
    }
}

【问题讨论】:

    标签: asp.net webforms updatepanel


    【解决方案1】:

    发生这种情况是因为您尝试执行Response.BinaryWrite

    您收到此错误是因为您尝试使用不允许的异步回调将非 HTML 返回到 UpdatePanel。我唯一可以建议的是尝试使用PostBackTrigger 并针对UpdatePanel 之外的控件。

    最好的解决方案是让您下载按钮生成另一个窗口,该窗口调用.ashx(通用处理程序)并通过 ashx 提供二进制文件。您可以附加一个 javascript 函数来处理单击,这将在 ashx 中打开一个新窗口,其中包含需要传入的任何参数。

    This link 有更多关于确切问题和解决方法的信息。

    有几种方法可以解决此问题 问题每个修复都有特定的范围。

    1.在Triggers中注册ButtonDownload PostBackTrigger控件 更新面板的子标签,如图 下面。

    2.也可以使用RegisterPostBackControl的方法 Page_Load 中的 ScriptManager 控件为 如下所示。

    【讨论】:

    • 那个链接对我有很大帮助。谢谢!
    【解决方案2】:

    如错误所述,Response.BinaryWrite 是异步回调期间列入黑名单的活动之一。这是由于 UpdatePanel 对其异步回调期间返回的内容进行了特殊处理。

    我建议将附件下载逻辑移动到单独的页面、HTTP 处理程序或服务中,允许使用 GET 访问它(通过控制查询字符串中的参数),并将 gvFiles 中的元素从无论它是什么(Button、ListButton、ImageButton 等)到新资源的超链接。通过 GET 从单独的资源下载,您将避免该错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多