我想创建一个excel,保存并下载。 但是,在创建excel文件的同时,我希望用户执行不同的过程。 那是我的控制器动作:

[HttpGet]
    public async Task<ActionResult> CreateExcel() {

        var path = string.Empty;

        await Task.Factory.StartNew(() => {
            path = SaveExcel();
        });

        return File(System.IO.File.ReadAllBytes($"{path}.xls"),
            System.Net.Mime.MediaTypeNames.Application.Octet,$"{Guid.NewGuid()}.xls");

    }

private string SaveExcel() {
        //this method will create an excel File and will return the file's path.
    }

但是当我跳转到另一个URL时,下载将被取消。

===============>>#1 票数:0 已采纳

您不能像这样并行化您的应用程序。 如果要允许用户在生成Excel的同时做其他事情,我想建议您这样做。

用文本“请稍等,您的Excel正在生成”打开新的弹出窗口,在此弹出窗口中,您可以对控制器操作进行GET调用。 同时,用户将能够在主窗口中浏览网站

 <a id="generateExcel">Generate excel for me</a>

<script>
    $(document).ready(function(){
        $('#generateExcel').click(function() {
            var url = '{LINK_TO_YOUR_CREATE_EXCEL_URL}';
            var newWindow = window.open('', 'popUpWindow', 'height=500,width=500,resizable=no,scrollbars=no,toolbar=no,menubar=no,location=no,directories=no,status=yes');
            newWindow.document.write("<html><head></head><body>Please wait, your excel is generating<script>window.location='"+url+"'</script></body></html>");
            newWindow.document.close();
            return false;
        })
    })  
</script>

  ask by Ekrem Değer translate from so

未解决问题?本站智能推荐: