MVC - 在下载文件前后加载屏幕/禁用按钮

5

所以我有一个按钮用于下载CSV文件。这个按钮的操作很简单:

$("#btnExportToContactList").click(function (e) {
    window.location.href = '/Home/ExportList';
});

我的操作只是返回一个
File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", filename);

一切都进行得很顺利。现在,当我按下按钮生成csv文件的时候,由于这个过程可能需要一些时间,我想在等待期间显示一个加载屏幕或简单地禁用该按钮。我的问题是如何禁用/启用该按钮?

我尝试了以下方法,但它并不起作用,因为浏览器被重定向到另一个页面,它将停止执行我的Javascript代码。

$("#btnExportToContactList").click(function (e) {
    $("#btnExportToContactList").attr("disabled", true);
    window.location.href = '/Home/ExportList';
    $("#btnExportToContactList").attr("disabled", false);
});

但是它没有起作用。有人有解决办法吗?

我需要的是一种在文件下载完成后禁用的方法。 - Wheels
那么,您想要限制每个用户仅下载一次或类似的限制吗? - lshettyl
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Wheels
但是一旦您点击按钮,您将被重定向!准备在哪里/何时发生? - lshettyl
window.location.href = '/Home/ExportList'; 这是我的控制器上的一个操作。这是服务器端的代码。 - Wheels
1个回答

0
每次页面准备好或加载完成时,您可以将disabled属性设置为false
$(function(){
   $("#btnExportToContactList").attr("disabled", false);

  $("#btnExportToContactList").click(function (e) {
    $("#btnExportToContactList").attr("disabled", true);
    window.location.href = '/Home/ExportList';
  });
});

更新:如果上述方法无效,您可以尝试像这样的解决方法。不要调用window.location.href,而是使用ajax请求调用控制器的操作,并返回包含在服务器上创建的文件的URL的JSON结果,然后在ajax调用成功时,您可以使用一些JavaScript代码下载此文件,然后更改所需元素的禁用属性。
查看更多信息。

我已经尝试过了,但它不起作用。由于我正在使用window.location.href,它不会重新加载同一页。 - Wheels
这是正确的,但如果没有必要在服务器上创建文件,我不想这样做。现在我正在尝试寻找另一种解决方案。 - Wheels
你能否发送另一个 AJAX 请求立即删除这个文件?因为你已经有了文件的 URL,所以不会有问题的话。如果可能的话。 - Nitin Varpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接