How to export to Excel in Asp.Net MVC?

SCRIPT

function PostExportValues(meter_id, range_type_id, start_date, end_date, returnUrl) { var meter = $("#meter_selection").val()[0]; $.ajax({ url: '@Url.Action("GridExportToExcel", "Widget")', type: 'POST', data: { MeterType: meter_id, DateRangeType: range_type_id, StartDate: start_date, EndDate: end_date, returnUrl: returnUrl, Meter: meter }, success: function () { alert("Success."); }, error: function () { alert("Error!"); } }); //end ajax } //end PostExportValues 

CONTROLLER

 public void GridExportToExcel(int MeterType, int DateRangeType, DateTime? StartDate, DateTime? EndDate, string returnUrl, int Meter) { Customers customer = CustomerManager.GetCustomer(WebSecurity.CurrentUserId); //if start date is null, then set it to another early date. DateTime startDate = DateTimeManager.GetStartDate(StartDate, DateRangeType, customer.sno); //if end date is null, then set to date time now. DateTime endDate = DateTimeManager.GetEndDate(EndDate, StartDate); IQueryable<MeterReadingsForChart> meterReadings = MeterReadingManager.GetCustomerMeterReadings(customer.sno, MeterType, Meter, startDate, endDate, DateTimeManager.GetTimeIntervalTypeById(DateRangeType)).AsQueryable(); // MeterReadingManager.GetCustomerTotalMeterReadings(customer.sno, MeterType, startDate, endDate, DateTimeManager.GetTimeIntervalTypeById(DateRangeType)).AsQueryable(); var table = MeterReadingManager.GetMeterReadingsPivot(meterReadings, MeterType); //table output some thing like following: //T1 T2 T3 //10 20 25 //13 23 21 //15 26 27 var grid = new GridView(); grid.DataSource = table; grid.DataBind(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls"); Response.ContentType = "application/excel"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); //return View("Index"); } 

The GridExportToExcel method works, and the script message is Success. but no action (nothing happens).

What am I missing? I expect the excel file to be automatically downloaded.

Thanks...

+4
source share
3 answers

You cannot force a file to be downloaded at the request of ajax, because the browser will not start downloading the file. don't use ajax call for your controller method, you can use like

 window.open("url/Exporttoexcel?id="); 

with the addition of parameters.

+9
source

The problem may be that you cannot boot using an ajax call. If you look at this: jQuery plugin to request ajax file download .

It will help you!

0
source

You can also use

 window.location.href = "controllerName/GridExportToExcel?id=" 
0
source

All Articles