Asp.net mvc 3 从MVC3导出CSV文件-Internet Explorer问题

Asp.net mvc 3 从MVC3导出CSV文件-Internet Explorer问题,asp.net-mvc-3,csv,download,internet-explorer-9,Asp.net Mvc 3,Csv,Download,Internet Explorer 9,我正在尝试为我拥有的一些数据创建CSV导出。看起来很简单,在Firefox和Chrome中工作得很好,但是在InternetExplorer中我收到一条消息说文件无法下载。没有其他错误消息,Visual Studio中没有中断,也没有我可以找到的调试信息 这是我的密码。也许我做错了什么 public ActionResult ExportStudentsCSV(IEnumerable<Student> students) { MemoryStream output = new

我正在尝试为我拥有的一些数据创建CSV导出。看起来很简单,在Firefox和Chrome中工作得很好,但是在InternetExplorer中我收到一条消息说文件无法下载。没有其他错误消息,Visual Studio中没有中断,也没有我可以找到的调试信息

这是我的密码。也许我做错了什么

public ActionResult ExportStudentsCSV(IEnumerable<Student> students) {
    MemoryStream output = new MemoryStream();
    StreamWriter writer = new StreamWriter(output, System.Text.Encoding.UTF8);
    writer.WriteLine("Username,Year Level,School Name,State,Date Joined");
    foreach (Student student in students) {
        writer.WriteLine(
                    "\"" + student.username
            + "\",\"" + student.year_level
            + "\",\"" + student.SchoolName
            + "\",\"" + student.state
            + "\",\"" + student.join_date
            + "\""
        );
    }
    writer.Flush();
    output.Seek(0, SeekOrigin.Begin);

    return File(output, "text/csv", "Students_" + DateTime.Now.ToShortDateString().Replace('/', '-') + ".csv");
}

可能与内容类型/内容配置有关,因为IE需要遵循标准


检查可能与内容类型/内容处理有关,因为IE在需要时遵循标准


签出

您可能需要添加内容处置标题

ExportStudentsCSV
函数中,返回前:

var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "filename.csv";
Response.AddHeader("Content-Disposition", cd.ToString());
或者,如果您想简单介绍一下(与上述内容相同):


您可能需要添加内容处置标头

ExportStudentsCSV
函数中,返回前:

var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "filename.csv";
Response.AddHeader("Content-Disposition", cd.ToString());
或者,如果您想简单介绍一下(与上述内容相同):


回答我自己的问题似乎有点不靠谱,但我认为我的经验可能会对某些人有所帮助。我做了一些进一步的挖掘,发现了一种完全替代的方法,使用DataTables和从FileResult继承的特定CsvActionResult来完成这项工作。

请看以下要点:

回答我自己的问题似乎有点不靠谱,但我认为我的经验可能会对某些人有所帮助。我做了一些进一步的挖掘,发现了一种完全替代的方法,使用DataTables和从FileResult继承的特定CsvActionResult来完成这项工作。

请参阅本文要点:

这对IE很有效,但现在Chrome不会下载,因为它显然接收到多个内容处置头,并且不允许。这对IE很有效,但现在Chrome不会下载,因为它显然接收到多个内容处置头,并且不允许。如果连接是SSL,IE7要求设置的内容长度头不是由File或FileContentResult设置的。我相信MVC3和IIS7会在幕后为您解决这个问题。但是,当SSL连接上没有内容长度头时,使用IE7在IIS 6上下载文件会导致问题。如果连接是SSL,IE7要求设置内容长度头,而不是按file或FileContentResult设置。我相信MVC3和IIS7会在幕后为您解决这个问题。但是,当SSL连接上没有内容长度头时,使用IE7在IIS 6上下载文件会导致问题。
Response.AddHeader("Content-Disposition", "attachment;filename=filename.csv");