2017-04-19 5 views
3

ich dachte über das Öffnen einer PDF-Datei in modal. Strom mitÖffnen einer PDF-Datei in Modal möglich?

@Html.ActionLink("open file", "Download") 

öffnen Sie ein anderes Windows. Ich möchte es zu einem Div auffüllen, so dass ich in Modal oder Overlay anzeigen kann.

ich bin ok mit jquery Lösung sowie zur Zeit meine Jquery mir einige Bytes Charakter zurück.

function openfile() { 
    $.ajax({ 
     url: '@Url.Action("Download", "mycontroller")', 
     type: "POST", 
     dataType: "application/pdf", 
     success: function (data) { 
      $('#showpdf').html(data); 
     }, 
     error: function (err) { 
      alert(err) 
     } 
    }); 
} 

Aktion in der Steuerung:

public ActionResult Download() 
{ 
    string path = HttpContext.Server.MapPath("/pdf/service_reports/SR26175.pdf"); 
    return File(path, "application/pdf"); 
} 
+0

Es in div nicht möglich ist, nur ein anderes Fenster oder Bild –

+0

, so kann ich legte einen '' und in einem Bild pdf setzen und setzen das Bild in div? –

+0

lol - nein. Sie können Ihre 'PDF' in' IMG' und IMG in 'base64' Datenformat umwandeln und dann in' ' zeigen. –

Antwort

4

Ein anderer Weg, dies zu tun ist pdf Weg von json Anfrage übergeben und dann Objekt innerhalb des modalen div verwenden:

<object id="myPdf" type="application/pdf" data="path/file.pdf"></object> 

function openfile() { 
    $.ajax({ 
     url: '@Url.Action("Download", "mycontroller")', 
     type: "POST", 
     dataType: "application/json", 
     success: function (data) { 
      $('#showpdf').html('<object id="myPdf" type="application/pdf" data="' + data.path +'"></object>'); 
     }, 
     error: function (err) { 
      alert(err) 
     } 
    }); 
} 

public ActionResult Download() 
{ 
    string path = HttpContext.Server.MapPath("/pdf/service_reports/SR26175.pdf"); 
    return Json(new {path = path}); 
} 

EDIT: Für bessere Benutzer

<object data="/path/file.pdf" type="application/pdf" width="700px" height="700px"> 
    <embed src="/path/file.pdf"> 
     This browser does not support PDFs. Please download the PDF to view it: <a href="/path/file.pdf">Download PDF</a>.</p> 
    </embed> 
</object> 
+0

funktioniert nicht. Ajax Fehler Rückgabeobjekt Objekt. Ich ändere die 'dataType:" application/pdf ",' zu 'dataType:" application/json ",' und 'public JsonResult Download()' auch der gleiche Fehler –

+0

hardcoding funktioniert. Aber Ergebnis wie iframe. Mini-Größe. '' –

+0

was du meinst, "Mini-Größe" ? –

1

Angenommen, Sie zu Hause einen Controller namens haben. Sie können ein iframe wie dieses

<div id='yourModel'> 
    <iframe src="/Home/Download"></iframe> 
</div> 

verwenden und jQuery verwenden, um das div anzuzeigen/zu verbergen.

+0

einfach und funktioniert. Aber das Ergebnis nicht sehr nett. pdf zu klein zum Ansehen. wenn keine wahl, dann werde ich neues window.thanks –

+1

adoptieren sie können immer breite und höhe verwenden, um die breite und höhe von iframe zu justieren, um ihre bedürfnisse zu erfüllen –

+0

yea.adjust wie in bild zeigen. Das PDF ist in der Mitte, das ist auch sehr klein. –

0

Ich habe versucht, dies aber am Ende habe ich machte diese becacuse ich zeigen müssen: Erfahrung auf verschiedenen Browsern, die vielleicht nicht object Tag, könnten wir als Ausweich verwenden object mit embed-Tag unterstützt diferent pdfs, die (nur für den vollständigen Pfad) in einem DB und auf einem freigegebenen Ordner gespeichert werden, dann habe ich es eins nach dem anderen, um dem Benutzer zu zeigen, auch hoffen, dass es für Sie arbeitet!

auf der Ansicht der modale inneren Körper.

<div class="row" style="text-align: center;"> 
       <object id="pdfViewer" data="~/Evidence/PdfFile.pdf" type="application/pdf" width="790" height="500"></object> 
       <div style="text-align: center;"> 
        <label id="errorTxt"></label> 
       </div> 
      </div> 

auf dem Controller in einem jsonresult.

  //HERE I GET THE REAL PATH OF THE FILE 
      string evidence = _manager.GetEvidence(id); 

      //CREATING THE NEW PATH FOR THE FILE 
      var path = Path.Combine(Server.MapPath("~/Evidence/"), "PdfFile.pdf"); 

      //SAVE TEMPORARILY ON EVIDENCE FOLDER INNER THE PROYECT 
      //WITH THE NEW NAME 
      System.IO.File.Copy(evidence, path, true); 

      //AND JUST RETURN A JSON WITH A MESSAGE TO OPEN MODAL 
      return Json("OK",JsonRequestBehavior.AllowGet); 

und die js Funktion mit jquery

function ShowExistEvidence(id) { 
    $.ajax({ 
     url: "@Url.Action("GetEvidence","ControllerName")", 
     type: "POST", 
     data: { 
      id: id 
     }, 
     success: function (data) { 
      if (data === 'OK') {      
       $("#modViewEvidencia").modal("show"); 
      } else { 
       $("#errorTxt").text('File not found'); 
       $("#modViewEvidencia").modal("show"); 
      } 

     } 
    }); 
}