代码之家  ›  专栏  ›  技术社区  ›  Sailing Judo

MVC同时发送文件和重定向到新页面的方式是什么?

  •  8
  • Sailing Judo  · 技术社区  · 15 年前

    我有一个用户必须填写和提交的表格。控制器操作执行一些工作并决定用户可以拥有一个文件,因此重定向到另一个操作,即FilePathResult。

        [CaptchaValidator]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(FormCollection collection)
        {
            // do some stuff ...
            return RedirectToAction("Download");
        }
    
    
        [AcceptVerbs(HttpVerbs.Get)]
        public FilePathResult Download()
        {
            var fileName = "c:\foo.exe";
            return File(fileName, "application/octet-stream", "installer.exe");
        }
    

    我想做的是将用户重定向到另一个页面,感谢用户下载该文件,但我不确定如何以“类似MVC”的方式实现这一点。

    我能想到的唯一方法就是跳过下载操作,改为重定向到Thankyu操作,让Thankyu视图使用javascript发送文件。但对我来说,这看起来不太像MVC。有更好的方法吗?

    结果:

    被接受的答案足够正确,但我想证明我实现了它。

    索引操作将更改重定向到的位置:

            return RedirectToAction("Thankyou");
    

    我添加这个控制器(和视图)是为了向用户显示任何“下载后信息”,并感谢下载文件。我从中获取的自动刷新属性 link text

        [AutoRefresh(ControllerName="Download", ActionName="GetFile", DurationInSeconds=3)]
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Thankyou()
        {
            return View();
        }
    

    重定向到的操作与以前相同:

        [AcceptVerbs(HttpVerbs.Get)]
        public FilePathResult GetFile()
        {
            var fileName = "c:\foo.exe";
            return File(fileName, "application/octet-stream", "installer.exe");
        }
    
    1 回复  |  直到 15 年前
        1
  •  11
  •   Sekhat    15 年前

    谷歌找到了这个标题:

    Refresh: 5; URL=http://host/path
    

    在您的情况下,URL将替换为下载操作的URL

    正如我正在阅读的页面所说,数字5是“刷新”url之前需要等待的秒数。

    由于该文件是下载文件,因此不应将您从漂亮的重定向页面上移开:)