2012-03-27 21 views
9

Mam żądanie ajax do mojego serwera, gdzie tworzę plik PDF. Teraz chcę wyświetlić ten plik w nowym oknie/karcie lub po prostu go pobrać. jak mogę to zrobić?return PDF in ajax request

moja prośba

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

Myślę, że należy wysłać normalny formularz do serwera lub zwrócić adres do utworzonego dokumentu PDF, który javascript może przekazać przeglądarkę do nowego okna ... –

+0

Ogólne rozwiązanie: To działało dla mnie (PDF modalne okno dialogowe z bajtu [] przez połączenie MVC-ajax) kamgman

Odpowiedz

12

Nie można używać AJAX do pobierania plików. Powodem tego jest to, że javascript nie pozwala na zapisanie pobranej zawartości na komputerze klienckim ani monitowanie o okno dialogowe Zapisz jako. należy użyć prostego HTML <form> lub kotwicę:

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

Jeśli trzeba przekazywać argumenty do tego działania regulatora, które są znane tylko na kliencie można subskrybować zdarzenie .submit tego formularza, a następnie dynamicznie wstrzyknąć ukryty pola do niego z odpowiednimi wartościami, a następnie pozostaw domyślną akcję wykonać. A jeśli wartości są znane po stronie serwera, po prostu użyj pomocników HTML do wygenerowania tych ukrytych pól.

+0

@Derin Dimitrov Jakieś dobre przykłady użycia kotwicy? –