2016-07-02 3 views
4

Ich rufe eine MVC-Aktion, dass es eine Speicher-PDF-Datei erstellt. Ich möchte Datei und Download sofort nach Abschluss der Aktion zurückgeben.Wie kann ich eine MVC-Aktion zum Herunterladen einer PDF-Datei aufrufen?

Code Ajax Aktion aufzurufen MVC

function convertToPDF() { 
     $.ajax({ 
      url: "/Tracker/ConvertPathInfoToPDF", 
      type: "GET", 
      data: JSON.stringify({ 'pInfo': null }), 
      dataType: "json", 
      traditional: true, 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 

      }, 
      error: function() { 
       alert("Unable to call /Tracker/ConvertPathInfoToPDF"); 
      } 
     }); 
    } 

MVC Aktion

public FileResult ConvertPathInfoToPDF(PositionInfo[] pInfo) 
    { 
     MemoryStream fs = new MemoryStream(); 
     //FileStream fs = new FileStream(@"C:\Test.pdf", FileMode.Create, FileAccess.Write, FileShare.None); 
     Rectangle rec = new Rectangle(PageSize.A4); 
     Document doc = new Document(rec); 
     PdfWriter writer = PdfWriter.GetInstance(doc, fs); 
     doc.Open(); 
     doc.Add(new Paragraph("Hamed!")); 
     doc.Close(); 

     return File(fs, System.Net.Mime.MediaTypeNames.Application.Octet, "Test.pdf"); 
    } 

Die MVC-Aktion wird ausgeführt, compeletly aber ich die folgende Fehlermeldung im Browser:

Fehler beim Laden der Ressource: th e-Server reagiert mit dem Status 500 (Internal Server Error)

+1

Mögliche Duplikat [Wie kann ich präsentieren eine Datei zum Herunterladen von einem MVC-Controller?] (http://stackoverflow.com/questions/730699/how-can-i-present-a-file-for-download-from-an-mvc-controller) –

Antwort

4

MVC Aktion:

public FileResult ConvertPathInfoToPDF(PositionInfo[] pInfo) 
    { 
     MemoryStream fs = new MemoryStream(); 
     Rectangle rec = new Rectangle(PageSize.A4); 
     Document doc = new Document(rec); 
     PdfWriter writer = PdfWriter.GetInstance(doc, fs); 
     doc.Open(); 
     doc.Add(new Paragraph("Hamed!")); 
     doc.Close(); 

     byte[] content = fs.ToArray(); // Convert to byte[] 

     return File(content, "application/pdf", "Test.pdf"); 
    } 

Ajax Code MVC Aktion aufzurufen:

function convertToPDF() { 
     window.location = '/Tracker/ConvertPathInfoToPDF?pInfo=null'; 
    } 
Verwandte Themen