Asp.net mvc 2 在ajax.action链接的部分页面上显示内联文档
我正在调用页面上的ajax.action链接。这将显示文档的名称。当我点击文档时,会向控制器发出一个ajax请求,该请求将返回一个文件内容结果,我希望该文件在浏览器的targetID div下内联显示 Code-bytestream=fs.ToArray(); fs.Close(); AppendHeader(“Content Disposition”,String.Format(“inline;filename={0}”,filename)); 返回文件(bytestream,“application/pdf”) 问题是,文件显示为流,并且没有正确显示内容Asp.net mvc 2 在ajax.action链接的部分页面上显示内联文档,asp.net-mvc-2,asp.net-ajax,file,content-type,Asp.net Mvc 2,Asp.net Ajax,File,Content Type,我正在调用页面上的ajax.action链接。这将显示文档的名称。当我点击文档时,会向控制器发出一个ajax请求,该请求将返回一个文件内容结果,我希望该文件在浏览器的targetID div下内联显示 Code-bytestream=fs.ToArray(); fs.Close(); AppendHeader(“Content Disposition”,String.Format(“inline;filename={0}”,filename)); 返回文件(bytestream,“applica
<legend>Document</legend>
<% if (Model.PresentDocument != null)
{ %>
<li><%: Ajax.ActionLink(Model.PresentDocument, "GetDocumentPage", new RouteValueDictionary(new { controller = "Document", action = "GetDocumentPage", id = Model.PresDocId }), new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "Document" })%></li>
<%} %>
<div id="Document">
</div>
文档
我是否需要为此div执行任何特定操作以显示内联pdf?您不能使用AJAX下载文件。实现这一点的一种可能方法是使用普通链接,单击此链接时,使用javascript动态生成iframe并将iframe源指向控制器操作:
<%= Html.ActionLink(
Model.PresentDocument,
"GetDocumentPage",
"Document",
new { id = Model.PresDocId },
new { id = "displayPdf" }
) %>
哇!这很有魅力。非常感谢。有没有一种方法可以将ajax“targetID”映射到iframe?基本上,在我编写的代码中,它将流正确地下载到浏览器中,但不显示内容。只是好奇@桑杰,不可能。您需要使用
iframe
的src
属性将其指向将返回内容的服务器脚本。谢谢!在您编写的控制器代码中,返回值不需要是FileContentResult吗?@Sanjay,当您使用返回文件
方法时,根据您要传递的第一个参数的类型,它将返回正确的内容类型。是的,它可以工作。你是最棒的!浪费了大约一天的时间弄清楚为什么我的文件没有显示出来。再次感谢
$(function() {
$('#displayPdf').click(function() {
$('#Document').html(
$('<iframe/>', {
src: this.href,
width: '300px',
height: '150px'
})
);
return false;
});
});
public ActionResult GetDocumentPage(string id)
{
byte[] pdf = ...
Response.AppendHeader("Content-Disposition", String.Format("inline; filename={0}", fileName));
return File(pdf, "application/pdf");
}