我正在使用asp.net mvc,我想在jquery对话框或boostrap模式弹出窗口中显示pdf。
我尝试了ajax调用,但是如果控制器操作返回带有Return File(....)
的文件,那么它在弹出窗口中输出错误。
如果我使用iframe,那么当我在iframe中指定url时,它会重定向到Httpget控制器操作,但我希望它重定向到httppost控制器操作(因为我还要发布表单)。
其实为什么我想在popup或iframe中打开pdf是因为现在pdf在同一个窗口中打开但我希望它在新的浏览器选项卡或弹出窗口内或iframe内打开,以便访问者继续使用网站而不按浏览器后退按钮。
我坚持这个......帮助.. !!!!
答案 0 :(得分:1)
您只能对iframe使用GET请求,这是正确的方法。因此,如果使用POST请求创建PDF,则需要返回某种文件ID或文件名。然后在你的iframe中使用ID或文件名获取文件。
ID
或filename
/path/to/your/pdf_files/<filename>.pdf
。<强>更新强>
如果要显示来自先前POST请求的小文件(建议不要将此方法用于大文件)而不将其保存在任何地方,请使用数据网址:
<iframe type="application/pdf"
width="95%"
height="95%"
src="data:application/pdf;base64,<base64_encoded_pdf_file_string_here>">
</iframe>
只需将 <base64_encoded_pdf_file_string_here>
替换为文件的实际base64字符串表示。
为了获取流的base64字符串,请使用Convert.ToBase64String方法。
答案 1 :(得分:0)
有点脏,但你可以创建某种“代理”页面,在那里你将首先引导你的IFRame,你将拥有一个表单(或者你甚至可以使用javascript在没有代理页面的情况下构建它)只 - 它可以是隐形的,形式本身)。然后,您可以借助javascript将数据传递到iframe中的此表单,并在该表单上发出提交操作。通过这种方式,您将发出POST请求(如果您正确配置表单)。
UPD:一个简单的例子:
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
var form = iframe.contentDocument.createElement("form");
form.action="http://example.com/myuri";
form.method="post";
iframe.contentDocument.body.appendChild(form);
var data = iframe.contentDocument.createElement("input"); // You can create more of these "data" variables if you wish to pass more data to the server
data.type="hidden";
data.name="data_field";
data.value="somevalue";
form.appendChild(data);
form.submit(); // This actually executes the form and passing all data as POST data to the server