2012-03-27 47 views
9

Tôi đã nhận được yêu cầu ajax đến Máy chủ của tôi nơi tôi đang tạo tệp PDF. Bây giờ tôi muốn hiển thị tập tin này trong một cửa sổ mới/tab hoặc chỉ cần tải về nó. Làm thế nào tôi có thể làm điều đó?trả lại PDF theo yêu cầu ajax

yêu cầu của tôi

$.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

Tôi nghĩ bạn nên gửi biểu mẫu bình thường đến máy chủ hoặc trả lại địa chỉ cho tài liệu pdf đã tạo mà javascript có thể chuyển tiếp trình duyệt sang cửa sổ mới ... –

+0

Giải pháp chung: Điều này phù hợp với tôi (PDF hộp thoại phương thức từ một byte [] qua cuộc gọi MVC-ajax) kamgman

Trả lời

12

Bạn không thể sử dụng AJAX để tải về tập tin. Lý do là vì javascript không cho phép bạn lưu nội dung đã tải xuống trên máy khách, cũng như không nhắc nhở hộp thoại Lưu dưới dạng. Bạn nên sử dụng một HTML đơn giản <form> hoặc một neo:

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

Nếu bạn cần phải vượt qua đối số cho controller action này mà chỉ được biết đến tại các khách hàng mà bạn có thể đăng ký vào các sự kiện .submit của mẫu đơn này và sau đó tự động tiêm ẩn các trường vào nó với các giá trị tương ứng và sau đó để hành động mặc định thực thi. Và nếu các giá trị được biết ở phía máy chủ, bạn chỉ nên sử dụng các trình trợ giúp HTML để tạo ra các trường ẩn đó.

+0

@Derin Dimitrov Bất kỳ ví dụ điển hình nào về việc sử dụng Anchor? –

Các vấn đề liên quan