在新标签页中打开表单,请等待'消息

时间:2015-06-02 15:14:17

标签: javascript ajax pdf tabs asp.net-mvc-5

我在提交表单后尝试在新标签页中显示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,而是在新标签页中打开。

1 个答案:

答案 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>