2015-04-06 55 views
0

我正在使用MVC在視圖中顯示PDF內容,但它不能正確呈現。如何在MVC中顯示PDF流

控制器動作:

[HttpPost] 
    public ActionResult GetDocumentContent() 
    { 
     byte[] result; 

     result = System.IO.File.ReadAllBytes(@"C:\test.pdf"); 

     Response.AppendHeader("Content-Disposition", new System.Net.Mime.ContentDisposition 
     { 
      FileName = "document.pdf", 
      Inline = true, 
     }.ToString()); 

     return File(result, "application/pdf"); 
    } 

的Jquery:

 var url = "/DocumentContent/GetDocumentContent"; 
     var self = this; 
     $.post(url, null,function (data) { 
      debugger; 
      var obj = $('<object type="application/pdf" width="100%" height="100%" border="2"></object>'); 
      obj.attr('data', data); 
      $('#divContainer').append(obj);    
     }); 

什麼是這個代碼錯誤了嗎?如何在View中顯示PDF流?

回答

0

data屬性是一個url而不是實際的數據。
另請注意,您收到的數據是文本,因爲$ .post不能返回二進制結果。
一個解決辦法是改變請求類型爲GET(因爲你沒有公佈任何數據),只是把該URL的對象的數據屬性

var url = "/DocumentContent/GetDocumentContent"; 
var obj = $('<object type="application/pdf" width="100%" height="100%" border="2" data="'+url+'"></object>'); 
$('#divContainer').append(obj); 

編輯
你可以,但你必須使用XHR2使用純粹的XMLHttpRequest,類似。

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function(){ 
    if (this.readyState == 4 && this.status == 200){ 
     var URL = window.URL || window.webkitURL; 
     var blobUrl = URL.createObjectURL(this.response); 
     var obj = $('<object type="application/pdf" width="100%" height="100%" border="2" data="'+blobUrl+'"></object>'); 
     $('#divContainer').append(obj); 
    } 
} 
xhr.open('POST', "/DocumentContent/GetDocumentContent"); 
xhr.responseType = 'blob'; 
xhr.send('parameter='+encodeURIComponent(some_data));  
+0

我需要使用POST方法,因爲我需要發送一些信息從客戶端到服務器(長度> url)。有什麼方法可以使用POST方法進行綁定? – user2015534

+0

@ user2015534請參閱更新。 – Musa