Refer the below sample code.
Namespaces
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.Reporting.WebForms;
using System.Web.Mvc;
using System.IO.Compression;
Controller
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Export(string[] quoteIDs)
{
List<SourceFile> files = new List<SourceFile>();
NorthwindEntities entities = new NorthwindEntities();
if (quoteIDs != null)
{
string reportType = "PDF";
string mimeType = "", encoding = "", fileNameExtension = "";
foreach (var qid in quoteIDs)
{
List<Customer> lstCustomers = new List<Customer>();
var quote = entities.Customers.Where(x => x.CustomerID == qid).FirstOrDefault();
lstCustomers.Add(quote);
LocalReport localReport = new LocalReport()
{
ReportPath = Server.MapPath("~/CustomerReport.rdlc")
};
ReportDataSource rds = new ReportDataSource("CustomerDataSet", lstCustomers);
localReport.DataSources.Add(rds);
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>" + reportType + "</OutputFormat>" +
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>0in</MarginLeft>" +
" <MarginRight>0in</MarginRight>" +
" <MarginBottom>0in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
string[] streams;
byte[] renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding,
out fileNameExtension, out streams, out warnings);
files.Add(new SourceFile { Extension = "." + fileNameExtension, Name = qid, FileBytes = renderedBytes });
}
TempData["Files"] = files;
return new JsonResult() { Data = new { MimeType = mimeType } };
}
return RedirectToAction("VirtualService");
}
[HttpGet]
public virtual ActionResult Download()
{
if (TempData["Files"] != null)
{
List<SourceFile> files = TempData["Files"] as List<SourceFile>;
byte[] bytearray = null;
using (MemoryStream ms = new MemoryStream())
{
// Creates the .zip
using (ZipArchive archive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (SourceFile file in files) // iterate through each file
{
// Creates empty file and names it inside of .zip
ZipArchiveEntry zipItem = archive.CreateEntry(file.Name + file.Extension);
// adds file to zipItem
using (MemoryStream ms4file = new MemoryStream(file.FileBytes))
{
using (Stream stream = zipItem.Open())
{
ms4file.CopyTo(stream);
}
}
}
}
bytearray = ms.ToArray();
}
return File(bytearray, "application/zip");
}
else
{
return new EmptyResult();
}
}
public class SourceFile
{
public string Name { get; set; }
public string Extension { get; set; }
public byte[] FileBytes { get; set; }
}
}
View
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$('#btnGetChecks').on('click', function () {
var arrSelectedQIDs = [];
$("input:checked").each(function (index, value) {
arrSelectedQIDs.push($(value).val());
});
$.ajax({
type: "POST",
url: "/Home/Export/",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ quoteIDs: arrSelectedQIDs }),
success: function (data) {
window.location = '/Home/Download';
},
error: function (request, status, error) {
alert("error " + request.responseText);
}
});
});
});
</script>
<input type="checkbox" value="ALFKI" />ALFKI<br />
<input type="checkbox" value="BOLID" />BOLID<br />
<input type="checkbox" value="BOTTM" />BOTTM<br />
<input type="button" name="command" id="btnGetChecks" value="Generate Selected" />