文件下载后MVC页面刷新问题

时间:2016-03-15 07:14:46

标签: javascript c# jquery asp.net-mvc model-view-controller

要求:

我们有UI,用户可以从服务器下载文件。在此页面上,我们还有一个字符串,表示来自服务器的下载最近下载时间。

文件(.csv)可以包含一到多个记录,因此未预定义下载时间。

问题:

我们基本上既需要文件也需要下载时间。我不能同时从控制器动作返回多个返回,即FileResult和RedirectToAction()。

已尝试解决方案: 1. jQuery promises(When()),但jQuery函数在服务器调用开始之前执行。 2.在下载名单按钮单击后5秒或任何预定义时间刷新页面。但是如果文件下载需要更多时间,那么页面会更早刷新,并且下载名册调用会自动被杀死。 3.我尝试过Ajax,但是Ajax不支持MVC中的FileResult返回类型。 以下是来自控制器,视图和脚本的代码供您参考。

控制器:

 public ActionResult DownloadCompleteRoster()
 {
     var rosterResponse = _rosterService.SaveCompleteRoster(User.EmployerId, User.UserId);
     if (rosterResponse.IsSuccess)
     {
         return File(new UTF8Encoding().GetBytes(rosterResponse.RosterFile.ToString()), "text/csv", rosterResponse.FileName);
     }
     TempData["ErrorMessage"] = rosterResponse.ErrorMessage;
     return RedirectToAction("Dashboard");
 }

查看:

<div>
    <a href="#" id="downloadCompleteRoster" class="btn secondary mt10">Download Roster File</a>
    @if (Model.LastCompleteDownloadDate != null)
    {
        <span class="small lastDownloaded"><em><strong>Last Downloaded:</strong> @string.Format("{0:MM/dd/yyyy hh:mm:ss tt}", Model.LastCompleteDownloadDate)</em></span>
    }
</div>

<script>    
    var urlDownloadCompleteRoster = '@Url.Action("DownloadCompleteRoster", "Admin")';
</script>    

JQuery脚本:

$("#downloadCompleteRoster").click(function () {
    DownloadCompleteRoster();
});

//download complete roster csv file 
function DownloadCompleteRoster() {
    window.location.href = urlDownloadCompleteRoster;
}

0 个答案:

没有答案