通过js发送数据并从动作控制器接收pdf

时间:2013-06-13 07:43:05

标签: c# javascript jquery asp.net-mvc

我正在使用javascript将两个字符串从我的视图发送到控制器。控制器接收该字符串并根据其值返回pdf页面。我正在使用this approach来动态创建pdf。一切都很好,当我查看firebug时我得到pdf,但我不知道在javascript成功操作中该怎么做,如何在视图上显示这个pdf。

我的js是

function GetDetails2(xx, xxx) {
$.ajax({
         url: ('/PdfReport/MyreportDemo'),
         type: 'POST',
         contentType: 'application/json',
         data: JSON.stringify({ dataOne: xx, dataTwo: xxx }),
         success: function (result) {                 
                    //alert("ok");
                },    
         error: function () {
               alert("error");
        }
       });
 }

1 个答案:

答案 0 :(得分:1)

JavaScript在处理二进制数据方面不是很擅长。直接处理此问题的唯一方法是将数据编码为base-64 encoded data-uri。通过<iframe>发布JSON也无效,因为您需要<form>

一种可能的解决方案是将后端更改为接受uri参数:

/PdfReport/MyreportDemo?dataOne=xx&dataTwo=xx

然后你可以使用<iframe>

<iframe name="hiddenframe" style="display: none;" src="about:blank"></iframe>
<form id="reportDemoForm" method="post" action="/PdfReport/MyreportDemo" target="hiddenframe">
  <input id="dataOne" name="dataOne" type="hidden" value=""/>
  <input id="dataTwo" name="dataTwo" type="hidden" value=""/>
</form>
$('#dataOne').val('xx');
$('#dataTwo').val('xx');
$('#reportDemoForm').submit();

这假设您要下载该文件。如果您想在页面上显示它,您可以改为显示<iframe>,并对其进行适当调整。