2012-03-27 17 views
9

私は自分のサーバーにどこでPDFファイルを作成しているのかをリクエストしています。今、私はこのファイルを新しいウィンドウ/タブに表示するか、単にそれをダウンロードしたいと思います。どうやってやるの?返信PDFをajaxリクエストで返す

私の要求

$.ajax({ 
    url: '/Document/CreatePDF', 
    type: 'POST', 
    data: { 
     docid: documentId, 
     dataId: array 
    }, 
    traditional: true, 
    success: function (data) { 
    } 
}); 

    [HttpPost] 
    public FileStreamResult CreatePDF(long docid, List<long> dataId) 
    { 
     var document = _rep.LoadDocument(docid.ToString(), Server.MapPath("~/Documents/") + docid + ".xml"); 

     var exporter = new PDFExporter(document); 

     MemoryStream fileStream = exporter.CreatePDF(); 
     byte[] PdfByte = fileStream.GetBuffer(); 
     fileStream.Flush(); 
     fileStream.Close(); 

     HttpContext.Response.AddHeader("content-disposition","attachment; filename=form.pdf"); 

     return new FileStreamResult(fileStream, "application/pdf"); 
    } 
+0

通常のフォームをサーバーに送信するか、javascriptが新しいウィンドウでブラウザを転送できる作成されたpdfドキュメントにアドレスを返すかのいずれかと思う... –

+0

一般的な解決策:これは私のために働いたMVC-ajax呼び出しによるバイト[]からのモーダルダイアログ) kamgman

答えて

12

あなたはファイルをダウンロードするためにAJAXを使用することはできません。その理由は、javascriptではダウンロードしたコンテンツをクライアントコンピュータに保存することも、[名前を付けて保存]ダイアログを要求することもできないからです。あなたがクライアントでのみ知られている。このコントローラのアクションに引数を渡す必要がある場合は、このフォームの.submitイベントをサブスクライブして、動的に隠された注入可能性が

@using (Html.BeginForm("CreatePDF", "Document", FormMethod.Post, new { id = "myform" })) 
{ 
    <button type="submit">Download</button> 
} 

:あなたは、単純なHTML <form>やアンカーを使用する必要がありますフィールドに対応する値を入力し、デフォルトのアクションを実行したままにします。また、値がサーバー側でわかっている場合は、単純にHTMLヘルパーを使用してこれらの非表示フィールドを生成する必要があります。

+0

@Derin Dimitrov Anchorを使用する良い例はありますか? –