asp.net mvc - Export to CSV from MVC Controller and View displays CSV raw data on Page -


i've got mvc view export excel working great, however, because i'm setting location.href leaving me page full of csv data rather neat grid results before user hit export button.

i'm trying think how change following script doing leave page alone. tried making call search go server again @ runtime user see's csv on webpage momentarily, not good.

any ideas appreciated, cheers

    $(function() {         $('#exportbutton').click(function() {             var url = $('#absolutepath').val() + 'waste.mvc/export';              var data = {                 searchtext: $('#searchtextbox').val().tostring(),                 searchtextsite: $('#searchtextboxsite').val().tostring(),                 startdate: $('#startdate').val(),                 enddate: $('#enddate').val()             };             $('#resultslist').load(url, data, function() {                 $('#loadinggif').empty();                 location.href = url + "?searchtext=" + data.searchtext + "&searchtextsite=" + data.searchtextsite + "&startdate=" + data.startdate + "&enddate=" + data.enddate;             });             //search(); fixes because grid displayed again after csv results         });     }); 

my controller code:

    public filestreamresult export(string searchtext, string searchtextsite, string startdate, string enddate)     {          var searchresults = getsearchresults(searchtext, searchtextsite, startdate, enddate);         httpcontext.response.addheader("content-disposition", "attachment; filename=export.csv");          var sw = new streamwriter(new memorystream());          sw.writeline("\"ref\",\"source\",\"collected\"");         foreach (var line in searchresults.tolist())         {             sw.writeline(string.format("\"{0}\",\"{1}\",\"{2}\"",                                        line.wasteid,                                        line.sourcewastetypeid.todescription(),                                        line.collecteddate.toshortdatestring()));         }         sw.flush();         sw.basestream.seek(0, seekorigin.begin);          return new filestreamresult(sw.basestream, "text/csv");         // return file(sw.basestream, "text/csv", "report.csv"); renders same result      } 

you have controller action return csv file attachment (it use content-disposition: attachment; filename=report.csv http header):

public actionresult getcsv() {     byte[] csvdata = ...     return file(csvdata, "text/csv", "report.csv"); } 

now can safely window.location.href = '/reports/getcsv'; , user prompted download csv report stay on same page.


Comments

Popular posts from this blog

linux - Using a Cron Job to check if my mod_wsgi / apache server is running and restart -

actionscript 3 - TweenLite does not work with object -

jQuery Ajax Render Fragments OR Whole Page -