在 mvc 中导出到 CSV 不起作用

Export to CSV in mvc not work

我想使用 MVC 将列表导出到 CSV 文件,Jquery。我想将文件写入响应流,但什么也没做。没有出现下载。

下面是我在 .cshtml 中的代码

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

在 .js 中

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

在我的控制器中

         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();
                }
        }

我也尝试这样做

       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");
            }
        }

我也是这样制作的

            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();
                    }
            }

但还是不行.. 没有下载 CSV 出现.. 当我全部工作时,没有错误。

现在我已经有了答案。我像这样更改脚本并且成功了..

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");

这是通过添加新的 System.Net.Mime.ContentDisposition 来实现的。但我还是不明白为什么。

我能够使用

 window.location = "/urlPath?filename=" + filename;

在我的控制器中

            filename = filename.ToString();
            byte[] fileBytes = System.IO.File.ReadAllBytes(filename);
            var response = new FileContentResult(fileBytes, "application/octet-stream");
            response.FileDownloadName = "Filename.csv";


            return response;