MVC C#下载文件并另存为对话框

时间:2011-07-15 08:59:17

标签: c# asp.net-mvc

大家都想知道是否有人可以提供帮助;我编写了这段代码,它将生成一个excel电子表格并将其保存到指定位置。我想通过从存储的位置读取文件然后询问用户他们想要存储它的位置来显示“另存为”对话框。 excel文件生成正常,我可以正常打开它!但是我的问题是我写的代码似乎是直接将文件输出到我的浏览器,所以我在浏览器屏幕上获取excel文件的所有内容,而不是按预期显示另存为对话框!

public ActionResult FormSuccess()
        {
            String FileName = System.Configuration.ConfigurationManager.AppSettings["FileName"].ToString();
            String FilePath = System.Configuration.ConfigurationManager.AppSettings["FileSaveLocation"].ToString();
            System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
            response.ClearContent();
            response.Clear();
            response.ContentType = "application/vnd.xls";
            response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
            response.TransmitFile(FilePath + FileName);
            response.End();

            return PartialView("FormSuccess");
        }

2 个答案:

答案 0 :(得分:6)

哟文斯,怎么样?还戴着奖章吗? :)

你不应该使用FileContentResult而不是PartialView吗?您将无法在同一个调用中返回文件和HTML“success”内容 - 您应该首先调用PartialView,然后使用javascript在新窗口中打开FileContentResult URL。

请参阅:http://www.mikesdotnetting.com/Article/125/ASP.NET-MVC-Uploading-and-Downloading-Files

以及此网址:

http://weblogs.asp.net/rajbk/archive/2010/05/03/actionresult-types-in-mvc2.aspx

答案 1 :(得分:4)

我认为您的问题是您返回PartialView。让我给你一点我的实现:

    public ActionResult FileXls()
    {
        var output = new MemoryStream();
        var writer = new StreamWriter(output);

        //create your workbook excel file
        ....
        //workbook.Save(output);

        writer.Flush();
        output.Position = 0;
        return File(output, "text/excel", "file.xls");
    }