2015-04-06 57 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