返回视图之间的FilePathResult

时间:2014-07-09 05:45:26

标签: asp.net asp.net-mvc download

通常,在ASP.NET,MVC或其他方面,我们让客户端通过让用户单击链接/按钮来下载文件;我假设此链接/按钮操作转到正确的控制器,然后重定向回主页面。但是,如何在一系列重定向期间从某个中间控制器下载?

基本上,当用户点击按钮创建PDF时,操作会转到PdfController创建PDF,然后,因为我假设他/她想要下载PDF(如果他/她没有& #39; t,他/她总是可以点击" No"),我想让浏览器在再次呈现页面之前下载PDF。如果我还没有失去你,我该如何做到这一点?

这是我到目前为止的样本。启动操作的按钮:

<a class="btn btn-primary col-md-2 col-md-offset-1" href="@Url.Action("MakePdf", "Pdf")">Create PDF</a>

PdfController的MakePdf()方法:

    public ActionResult MakePdf()
    {
        string PdfUrl = Environment.GetEnvironmentVariable("HOMEDRIVE") + Environment.GetEnvironmentVariable("HOMEPATH") + "/Sites/Bems/PDF/UserPdfs/report" + Id + ".pdf";
        // create the PDF at this PdfUrl

        return RedirectToAction("ShowPdf", "Pdf", new { PdfUrl = PdfUrl });
    }

PdfController的ShowPdf()方法,从之前的MakePdf()方法重定向:

public ActionResult ShowPdf(string PdfUrl)
    {

        if (System.IO.File.Exists(PdfUrl))
        {
            return File(PdfUrl, "application/pdf"); // Here is where I want to cause the download, but this isn't working
        }
        else
        {
            using (StreamWriter sw = System.IO.File.CreateText(PdfUrl))
            {
                sw.WriteLine("A PDF file should be here, but we could not find it.");
            }
        }

        return RedirectToAction("Edit", "Editor"); // Goes back to the editing page
    }

我试图在我指定的代码中导致下载,但我不确定如何导致它。通常你会以某种方式将它以某种方式返回到视图中,而在这里我会调用一个对象,我认为,但我对这一切的工作方式非常模糊。无论如何,我所做的事情并不起作用。关于那是什么的任何想法?

1 个答案:

答案 0 :(得分:1)

您无法返回ViewResult RedirectToAction("Edit", "Editor")并在同一回复中返回FileResult File(PdfUrl, "application/pdf")

要完成您的任务,您可以遵循以下方案:

  • 点击按钮创建pdf
  • 致电RedirectToAction("Edit", "Editor");
  • 在这种情况下,在视图的末尾,向返回FileResult的action方法添加一个javascript调用
  • 呈现页面后,下载将自动开始