【问题标题】:Not able to download the file if a model dialog is already opened如果模型对话框已打开,则无法下载文件
【发布时间】:2023-04-02 17:37:02
【问题描述】:

我们使用 jquery 扩展打开了一个弹出窗口。我们的要求是 单击弹出窗口中的按钮下载文件。我的代码就像 这个:-

JS code:-
showModalData: function (obj) {
        var url = OC.MVC.util.getLink("Employee", "GetDetail");
        $.ajax({
            url: url,
            type: 'GET',
            success: function (result) {                         
                $.modal(result);//open the modal popup
            },
            error: function (err) {
                alert(err.responseText);
            }
        });
    }

Controller code:-
 public virtual ActionResult GetDetail(Employee model)
        {
            return PartialView(model);
        }

View:-
<div>
@Html.Raw(Html.Button("btnDownload", "Download").ToString())
<div>

现在点击下载,我必须下载此代码的文件 是:-

  public ActionResult Download()
        {
            byte[] fileBytes = System.IO.File.ReadAllBytes(@"c:\New\note.txt");
            string fileName = "note.txt";
            return (File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName));

        }

单击下载按钮时,它将调用定义的下载操作 在控制器中。现在返回 (File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet,文件名));应该 打开保存对话框以选择保存文档的路径。但是 它没有打开保存对话框。它也没有显示错误 并且什么也没有发生。注意:Modal Popup 中存在下载按钮。

【问题讨论】:

  • 您必须向我们提供比“不工作”更多的信息。究竟发生了什么(或没有发生)?请向我们展示您的调试工作的结果。你需要缩小问题的范围。仅仅是模式弹出窗口阻止您单击按钮,还是您可以单击,但存在某种问题或错误?您的代码中没有任何内容可以泄露。
  • 只有在正确请求的情况下,而不是通过 ajax。请求的类型取决于在浏览器中运行的按钮(以及任何相关的 Javascript)的设置,而不是服务器。我不知道你的“下载”按钮被配置为做什么——我什至看不到你的 Razor 代码生成的最终 HTML,我不知道它是否附加了 Javascript 事件。
  • 可能是在浏览器中运行的代码的问题,而不是浏览器本身的问题。通过 ajax 下载文件不起作用,这没有任何意义,因为它只是将文件数据返回到 Javascript 变量中,而不是实际导致正确下载到用户磁盘。我没有足够的信息来证明这就是正在发生的事情,但它肯定很有可能。
  • 所以...正如我一直说的那样,您需要确定在这种情况下它是否是通过 ajax 调用的。显然,“正常”发生的事情和在这种特定情况下发生的事情存在某种差异。您没有向我展示足够的代码或给我足够的信息来识别差异是什么,但显然必须有一个。您需要仔细查看并找到它。您应该能够使用浏览器的网络工具检测对下载操作的请求是否通过 AJAX(有时称为 XHR)发出 - 例如,您可以设置过滤器以仅显示 XHR 请求。
  • @ADyson 感谢您的建议,它工作正常。我删除了下载按钮的 ajax 调用,并直接从按钮调用了下载方法。

标签: jquery css asp.net-mvc asp.net-mvc-4


【解决方案1】:

您需要确保您的下载操作是通过来自浏览器的正常 HTTP 请求调用的,而不是通过 JavaScript 发起的 AJAX 调用。

【讨论】:

    猜你喜欢
    • 2011-05-30
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2018-10-14
    • 2017-11-20
    • 1970-01-01
    相关资源
    最近更新 更多