Search code examples
c#jqueryasp.net-mvccsvexport-to-csv

Export to CSV in mvc not work


I want to export a list to CSV file using MVC, Jquery. I want to write to a file to the response stream but doesn't do anything. No Download appear.

Below is my code in .cshtml

 <button id="btnGenerateCSV">Generate CSV</button>

in .js

 $('#btnGenerateCSV').click(function () {
   $.post(root + "ClaimInternal/DownloadCsv");
 });

In myController

         private string GetCsvString(IList<Area> Area)
         {
            StringBuilder csv = new StringBuilder();

            csv.AppendLine("AreaID,AliasName,Description,BankName");

            foreach (Area area in Area)
            {
                csv.Append(area.AreaID + ",");
                csv.Append(area.AliasName + ",");
                csv.Append(area.Description + ",");
                csv.Append(area.BankName + ",");

                csv.AppendLine();
            }

            return csv.ToString();
        }


        public void DownloadCsv()
        {
            using (Database db = new Database(_ConnectionString))
            {
                AreaDAC dacArea = new AreaDAC(db);
                List<Area> data = dacArea.Search("", "", "");
                string facsCsv = GetCsvString(data);

                // Return the file content with response body. 
                Response.ContentType = "text/csv";
                Response.AddHeader("Content-Disposition", "attachment;filename=Area.csv");
                Response.Write(facsCsv);
                Response.End();
                }
        }

I try to make like this also

       public FileContentResult DownloadCsv()
        {
            using (Database db = new Database(_ConnectionString))
            {
                AreaDAC dacArea = new AreaDAC(db);
                List<Area> data = dacArea.Search("", "", "");

                JsonResult result = new JsonResult();
                result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                result.Data = data;

               string facsCsv = GetCsvString(data);
               return File(new System.Text.UTF8Encoding().GetBytes(facsCsv), "text/csv", "Area.csv");
            }
        }

I make also like this

            public void DownloadCsv()
            {
                using (Database db = new Database(_ConnectionString))
                {
                    AreaDAC dacArea = new AreaDAC(db);
                    List<Area> data = dacArea.Search("", "", "");
                    string facsCsv = GetCsvString(data);

                    // Return the file content with response body. 
                                   Response.Clear();
                Response.Buffer = true;
                Response.AddHeader("content-disposition", "attachment;filename=Area.csv");
                Response.Charset = "";
                Response.ContentType = "application/text";
                Response.Output.Write(facsCsv);
                Response.Flush();
                Response.End();
                    }
            }

But still not work.. No download CSV appear.. While When I got it all working, no error.


Solution

  • Now I already got the answer. I change the script like this and it's work..

    var cd = new System.Net.Mime.ContentDisposition
                    {
                        FileName = "Area.csv",
                        Inline = true,
                    };
                    Response.AppendHeader("Content-Disposition", cd.ToString());
                    return File(new System.Text.UTF8Encoding().GetBytes(facsCsv), "text/csv");
    

    It's work by adding new System.Net.Mime.ContentDisposition. But I'm still not understand why.