我无法找到一种方法解决这一问题,希望有人可以提出解决方案。 问题是我有一个ASP Web应用程序(MVC)。控制器之一执行用户下载文件的操作。动作中的代码如下
public ActionResult DownloadUserData()
{
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + myfileName + ";");
response.TransmitFile(myfileName);
response.Flush();
response.End();//My guess is because response has been ended here therefore redirection below has no impact
return RedirectToAction("ThankYouPage", "Purchases"); //This doesn't seem to work as I have an javascript in page if loaded it would show an alert
}
我已经尝试了许多用于重定向的变体,但似乎没有任何效果。 请指导
答案 0 :(得分:0)
您不需要包括Response.End()行。重定向完成后,它将自动发生。
此外,您的操作应该只有一个操作,要么下载文件,要么重定向到另一页面。
由于在不同的请求中发生下载,因此无法知道何时在客户端通过服务器端完成下载,因此无法执行任何操作。
如果要更新页面中的某些信息,则可以使用JavaScript函数,请尝试使用Ajax,当请求完成时,它将允许您在客户端执行某些操作。
我希望它对您有用,请考虑一下并编写好代码!
答案 1 :(得分:0)
某人通常如何进行文件下载/谢谢页面?我们可以看看Microsoft自己如何下载灵感。
通常会有一个带有标记为“下载”的按钮的页面。单击该链接仅会将您带到“谢谢”页面。在第二页上,有两件事:
指向实际下载文件的显式链接(以及一条消息,提示如果下载未自动开始,则使用该文件)
一个<iframe>
的{{1}}设置为与上面的显式链接相同的位置。
现在,当然,您要在文件完全下载之前显示“谢谢”消息,但实际上它已经足够好了。人们开始下载后会期望看到“之后”页面,即使实际上需要花费几个小时才能运行。
基于此,您应该能够自己构建非常相似的东西。