2017-02-08 3 views
0

Ich bin neu bei C# und ich möchte eine neu und dynamisch erstellte PDF auf der Web-Browser-Client-Seite auf einer neuen Registerkarte mit HttpResponseMessage anzeigen.PDF auf neuem Tab nach AJAX-Aufruf MVC C anzeigen #

Das erstellte PDF ist gültig. Dies ist mein Controller-Code:

[HttpGet] 
    public HttpResponseMessage ShowPDF() 
    { 

     MemoryStream ms = new GetPDF(); 
     Byte[] bytes = ms.GetBuffer(); 

     HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); 
     Response.AppendHeader("Content-Disposition", "inline; filename=test.pdf"); 

     result.Content = new StreamContent(ms); 
     result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 

     return result; 
    } 

Nach dem Einschalten Taste auf HTML-Seite klicken, nichts passiert, kein Fehler, aber kein neues PDF zu angezeigt. Ich habe versucht, mit MemoryStream oder Buffer, aber nichts scheint zu funktionieren.

EDIT

Hier ist meine Ansicht Code:

 <button id="GetPDF" class="btn btn-primary pull-right">GET PDF</button> 

Javascript:

$('#GetPDF').click(function (e) { 
     e.preventDefault(); 
     $.ajax({ 
      url: '@Url.Action("ShowPDF", "Controller")', 
      method: 'GET', 
      success: function (data, textStatus, jqXHR) { 
      //Showing something but what 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
      //Showing error message 
      } 
     }); 
    }); 
+0

Welcher Knopf? Sie haben keine Schaltfläche angezeigt. Haben Sie versucht, den Code zu debuggen? Sicherstellen, dass Ihre Aktionsmethode erreicht ist usw.? – mason

+0

Ich habe meinen Beitrag bearbeitet, und ja meine Aktionsmethode wird aufgerufen. – rvsntn

+0

nichts passiert mindestens teilweise, weil du mit dem Ergebnis deines Ajax-Aufrufs nichts machst. Es sei denn, Sie haben in Ihrem Beispiel den Inhalt des Rückrufs "Erfolg" verpasst. Und es ist gut, dass Ihre Aktionsmethode aufgerufen wird. Haben Sie also überprüft, dass in der Antwort definitiv Inhalt zurückgegeben wird? – ADyson

Antwort

0

Okay, ich schaffte es funktioniert. Hier ist meine Lösung, werde ich es optimieren morgen ...

Javascript:

 $('#GetPDF').click(function (e) { 
     window.open('@Url.Action("ShowPDF", "Controller")'); 
    }); 

Controller-Methode:

[HttpGet] 
    public ActionResult ShowPDF() 
    { 
     try 
     { 
      MemoryStream ms = new MemoryStream(GetPDF().ToArray()); 
      FileStreamResult filestream = new FileStreamResult(ms, "application/pdf"); 
      return filestream; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception(); 
     } 
    } 

GetPDF gibt einen Memorystream, aber geschlossen. Sie müssen das Byte [] - Element mithilfe von ToArray() abrufen und dann mithilfe von Konstruktor einen weiteren MemoryStream erstellen.

Vielen Dank an Adyson und Maurer für die Hilfe.

Verwandte Themen