ASP MVC - 下载文件,然后导航到视图

时间:2014-11-22 07:40:54

标签: c# asp.net-mvc file view

我正在开发一个asp.net - MVC应用程序并遇到以下问题: 当用户键入特定网址时,在我的情况下:

http://localhost/Download

我希望它转到action方法,下载文件然后导航到action方法的相应视图:

我的代码看起来像这样:

 public ActionResult Index()
    {
        string filePath = WebConfigurationManager.AppSettings["Download"];

        FileInfo file = new FileInfo(filePath);

        if (file.Exists)
        {
            Response.Clear();

            Response.ClearHeaders();

            Response.ClearContent();

            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);

            Response.AddHeader("Content-Length", file.Length.ToString());

            Response.ContentType = "text/plain";


            Response.TransmitFile(file.FullName);

            Response.Flush();

            Response.End();
        }


        return View();
    }

我的观点看起来很简单:

@{
ViewBag.Title = "Index";
 }
 <h2>Downloading ...</h2>

当我运行它时,我得到了该文件,但它没有导航到视图,而是保留在上一个URL中。

编辑 - 答案: 感谢@Abbas Galiyakot 他的回复。

以下是执行我想要的更新代码:

public ActionResult Index()
    {
       return View();
    }


    public ActionResult DownloadFile()
    {
        string filePath = WebConfigurationManager.AppSettings["Download"];

        FileInfo file = new FileInfo(filePath);

        if (file.Exists)
        {
            Response.Clear();

            Response.ClearHeaders();

            Response.ClearContent();

            Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);

            Response.AddHeader("Content-Length", file.Length.ToString());

            Response.ContentType = "text/plain";


            Response.TransmitFile(file.FullName);

            Response.Flush();

            Response.End();
        }

        return new EmptyResult();

    }





@{
   ViewBag.Title = "Index";
 }

<h2>Downloading...</h2>


<script type="text/javascript">
    window.location.href = '@Url.Action("DownloadFile", "Home")';
</script>

1 个答案:

答案 0 :(得分:2)

每个HTTP请求只能有一个响应 - 你试图偷偷进入两个(文件和一个页面)。

通常,当您发送“Content-Disposition:attachment”HTTP标头时,浏览器将保留在当前页面上并弹出文件保存对话框(或自动将文件保存在您的下载中)。

您将不得不改变策略。在新窗口中打开此页面(下载文件)并使用javascript进行重定向。