You cannot return multiple files, but you can compress several files in a .zip file and return this compressed file, for example, create your own ActionResult project in your project, for example:
public class ZipResult : ActionResult { private IEnumerable<string> _files; private string _fileName; public string FileName { get { return _fileName ?? "file.zip"; } set { _fileName = value; } } public ZipResult(params string[] files) { this._files = files; } public ZipResult(IEnumerable<string> files) { this._files = files; } public override void ExecuteResult(ControllerContext context) { using (ZipFile zf = new ZipFile()) { zf.AddFiles(_files, false, ""); context.HttpContext .Response.ContentType = "application/zip"; context.HttpContext .Response.AppendHeader("content-disposition", "attachment; filename=" + FileName); zf.Save(context.HttpContext.Response.OutputStream); } } }
And use it as follows:
public ActionResult Download() { var zipResult = new ZipResult( Server.MapPath("~/Files/file1.xml"), Server.MapPath("~/Files/file2.xml"), Server.MapPath("~/Files/file3.xml") ); zipResult.FileName = "result.zip"; return zipResult; }
More details here: http://www.campusmvp.net/blog/asp-net-mvc-return-of-zip-files-created-on-the-fly
source share