FileResult在ASP mvc中返回后触发javascript

时间:2011-11-03 20:15:36

标签: javascript asp.net-mvc

我有一个Javascript电话:

window.location.replace(instanceExtension(baseURL + "/AccountsReceivable/PrintStatementOfAccount?clientId=" + clientId, -1));

PrintStatementOfAccount()方法需要几秒钟,所以我在页面上添加了一个掩码,表明PrintStatement正在加载。

ASP方法定义为:

public FileResult PrintStatementOfAccount(long clientId) { ... }

一切都很好,但是我想在文件返回后禁用等待掩码。有关如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:1)

您可以将令牌传递给该方法,并在javascript中检查该令牌。

var token = new Date().getTime();
$('#download_token_valueid').val(token); 
$.download(path + "Print.ashx", 'Id=' + id + "&token=" + token);    

fileDownloadCheckTimer = window.setInterval(function () {
        var cookieValue = $.cookie('fileDownloadToken');
        if (cookieValue == token)
            finishDownload();
    }, 1000);

function finishDownload() {
    window.clearInterval(fileDownloadCheckTimer);
    $.cookie('fileDownloadToken', null); //clears the cookie value
    $.unblockUI();
}   

答案 1 :(得分:1)

您无法从JavaScript了解该文件是否已返回浏览器。

作为一种解决方法而不是直接返回文件,您可以拆分该过程:

  1. 文件已准备好下载:使用以某种方式识别文件的参数重新加载同一页面。
  2. 在重新加载时,您读取该参数并将其保存在javascript值中。在这里你可以隐藏等待面具。
  3. 在页面中,检查javascript文件标识符是否为空,如果不是,则使用javascript window.location ='url_to_get_file'向服务器发出GET请求。