1

したがって、次のシナリオがあります。

--- 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:サーバーから受信したメッセージを解析できませんでした。」

4

1 に答える 1

5

fiddler を実行して応答を確認すると、ダウンロードが表示されると思います。問題は、部分的なページ レンダリングです。クライアント側が取得すると、ページの更新を取得する必要があると判断し、代わりにバイナリ ファイルを取得します。いくつかの解決策があります:

オプション #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> 
于 2013-07-22T15:30:11.623 に答える