通常,在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
}
我试图在我指定的代码中导致下载,但我不确定如何导致它。通常你会以某种方式将它以某种方式返回到视图中,而在这里我会调用一个对象,我认为,但我对这一切的工作方式非常模糊。无论如何,我所做的事情并不起作用。关于那是什么的任何想法?
答案 0 :(得分:1)
您无法返回ViewResult RedirectToAction("Edit", "Editor")
并在同一回复中返回FileResult File(PdfUrl, "application/pdf")
要完成您的任务,您可以遵循以下方案:
RedirectToAction("Edit", "Editor");