2017-08-25 2 views
0

Ich arbeite an einem Projekt und ich muss ein PDF in einem neuen Tab anzeigen, ich habe einen Controller, der das PDF von einem Berichtsdienst als byte[] erhält.Anzeige PDF-Stream vom Controller in einem neuen Fenster

var data = Search(search_info); 
var stream = new MemoryStream(data, 0, data.Length, true, true);  
Response.Clear(); 
Response.ClearHeaders(); 
Response.AddHeader("Content-Disposition", "filename=\"\"" + "caseoverview" + ".pdf" + ""); 
Response.ContentType = MimeTypes.ApplicationPdf; 
Response.OutputStream.Write(data1, 0, Convert.ToInt32(stream.Length)); 
Response.Flush(); 
return new FileStreamResult(stream, "application/pdf"); 

ich Ajax bin mit dem Controller nennen:

@using (Ajax.BeginForm("Search", "Controller", null, 
      new AjaxOptions 
      { 
       HttpMethod = "post", 
       OnComplete = "OnCompleteMethod", 
       OnFailure = "OnFailtureMethod" 
      })) 
     { 

      <div id="query-filter" class="filters"> 
       @Html.Partial("QueryFilter", Model) 
      </div> 
      <div class="row"> 
       <div class="col-md-2 col-sm-6 col-md-offset-8"> 
        <button class="btn btn-submit btn-block" type="submit">Find</button> 
       </div> 
       <div class="col-md-2 col-sm-6"> 
        <button class="btn btn-submit btn-block" type="reset">Reset</button> 
       </div> 
      </div> 
     } 

Und das Javascript für den Erfolg Methode ist:

function OnCompleteMethod(dataq, status) { 
    if (status === "success") { 

     var w = window.open("data:application/pdf, " + escape(dataq.responseText)); 
     w.document.write(dataq.responseText); 
     w.document.close(); 
} 
} 

Und das ist, was ich in der neuen Registerkarte bin immer :

enter image description here

Kann mir bitte jemand bei diesem Problem helfen und mir erklären was ich falsch mache oder was mir bei der Lösung fehlt.

Vielen Dank.

Antwort

0

ich das Problem mit einem anderen Ansatz lösen, anstatt den Ajax-Aufruf zu verwenden Ich habe gerade diese Javascript-Funktion:

function reportPrinter() { 
var myParamether= $('#paramether').val(); 
window.open('/MyController/ReportPrinterMethod?report=reportview&paramether=' + myParamether, 'ReportView', ''); 

}

und im Controller ich für diesen Ansatz, um die Methode zu ändern:

[HttpGet] 
    public ActionResult ReportPrinterMethod(string myParamether) 
    { 
     if (!ModelState.IsValid) return View(); 

     var data = GetDataReport(myParamether); //Return a byte[] with the pdf content. 

     Response.AddHeader("Content-Disposition", "filename=\"\"" + "reportview" + ".pdf" + ""); 
     Response.ContentType = "application/pdf"; 
     Response.OutputStream.Write(data, 0, Convert.ToInt32(data.Length)); 
     Response.Flush(); 
     Response.Close(); 
     return View(); 
    } 

Und das behob das Problem.

Verwandte Themen