【问题标题】:Opening form in a new tab with 'Please wait' message在新选项卡中打开表单并显示“请稍候”消息
【发布时间】:2015-08-16 11:26:22
【问题描述】:

我尝试在提交表单后在新选项卡中显示 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 而是在新选项卡中打开。

【问题讨论】:

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


    【解决方案1】:

    也许有人会觉得它有帮助:

    我最终做的是创建一个接受表单值的新视图。表单提交后,新视图会在新选项卡中打开,并且仅包含“请稍候”消息。加载文档后,它立即使用 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>
    

    【讨论】:

    • 我们能否看到控制器中的操作以了解您的操作方式?
    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2012-04-25
    • 2022-08-16
    • 2015-01-17
    • 2011-05-12
    相关资源
    最近更新 更多