我在提交表单后尝试在新标签页中显示PDF。但是,导出PDF需要一段时间,因此当用户单击导出时,将打开新的空白选项卡,并且没有明确指示发生了什么。
要在新标签页中打开表单结果我使用:
@using (Html.BeginForm("Export", "Reviews", FormMethod.Post, new { target = "_blank" } ))
和控制器中的方法是:
public FileStreamResult Export(int presentationID, int[] selectedViews)
{
...
return new FileStreamResult(stream, "application/pdf");
}
有没有办法将预加载器放在新标签的正文中,或者只有在PDF准备好显示后打开标签?我不想使用window.open()
,因为这会创建一个默认阻止的弹出窗口。
Ajax File download Issue描述了类似的问题,但就我而言,我并不希望下载PDF,而是在新标签页中打开。
答案 0 :(得分:0)
也许有人会发现它有用:
我最终做的是创建一个接受表单中值的新视图。在表单提交后,新视图会在新标签页中打开,并且只包含“请等待”'信息。加载文档后,立即使用JavaScript重定向到pdf导出方法。它有点脏,但有效。
@{
var url = Url.Action("Export", "Reviews", new { presentationID = Model.PresentationID });
var sb = new System.Text.StringBuilder(url);
foreach (var view in Model.SelectedViews)
{
sb.AppendFormat("&selectedViews={0}", view);
}
}
<div class="export-wait">
<i class="fa fa-spinner fa-spin fa-3x"></i>
<h2>Please wait</h2>
<p>
Your report is being prepared, this may take a few minutes...
</p>
</div>
<script>
window.location = '@Html.Raw(sb.ToString())';
</script>