1

次のように PdfActionResult クラスを作成しました。

public class PdfActionResult : ActionResult
{
    public byte[] FileContents { get; set; }
    public string FileName { get; set; }


    public override void ExecuteResult(ControllerContext context)
    {
        var cd = new System.Net.Mime.ContentDisposition()
                     {
                        FileName = FileName,
                        Inline = false,
                     };

        context.HttpContext.Response.Buffer = true;
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.AppendHeader("Content-Disposition", cd.ToString());
        context.HttpContext.Response.ContentType = "application/pdf";
        context.HttpContext.Response.BinaryWrite(FileContents);
    }

}

PdfActionResult を返すコントローラー メソッドがあります。これは、ビュー内から呼び出された場合は正常に機能しますが、部分ビューから呼び出された場合は失敗します。私の推測では、コントローラーのコンテキストと関係があると思います。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

1

問題は部分的なビューではなく、Ajax.BeginFormを使用していたという事実でした。Ajaxコンテキストでダウンロードを試みていたため、失敗しました。Html.BeginFormに変更することでうまくいきました。これが、将来誰かに役立つことを願っています。

于 2012-09-18T13:00:26.867 に答える
1

私のコメントであなたの質問にもっと直接答えないことをお詫びします。

これを部分的に見るとどうなると思いますか?基本的に、ファイルの場合、それはオールオアナッシングの提案です。FileResultを返すとすぐに、ゲームオーバーになります。ページはレンダリングされず、発生するのはファイルがクライアントのブラウザにストリーミングされることだけです。基本的に、HTTPストリームでは、1つのコンテンツタイプ(HTMLドキュメントまたは別のタイプのファイル)のみを持つことができます。

本当に必要なのが、フレーム内にPDFを表示するカスタムマークアップのあるページを作成することである場合は、タグを使用し、そのiFrameタグの<iframe>ソースをファイルを返すアクションに指定することをお勧めします。

于 2012-09-18T02:50:56.523 に答える