2011-07-15 45 views
3

大家好奇,如果有人可以帮忙;我写了这个代码,它将生成一个Excel电子表格并将其保存到指定的位置。然后,我想通过从存储位置读取文件来显示“另存为”对话框,然后询问用户他们想要存储它的位置。 Excel文件生成正常,我可以正常打开它!然而,我的问题是我写的代码似乎是直接将文件输出到我的浏览器,所以我得到了我的浏览器屏幕上的Excel文件的所有内容,不像预期的那样显示保存为对话框!MVC C#下载文件并另存为对话框

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"); 
     } 

回答

6

哟文斯,怎么样?仍然戴着奖章? :)

不应该使用FileContentResult而不是PartialView?您将无法在同一个调用中返回文件和HTML“成功”内容 - 您应该首先调用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

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"); 
    } 
相关问题