动态CSV文件下载

时间:2011-12-22 18:48:32

标签: c# asp.net-mvc csv

在一个MVC项目中,我有一个ActionLink,当点击它时,它应该采用与用户相关的任意数量的对象(作为List提供),动态地构建对象的CSV文件。属性并提示下载。该文件不应该在服务器上持久存在,因此需要在下载后将其删除,或者下载需要来自流或类似文件。最新的解决方法是什么?我已经看过这样的示例,它手动编译CSV字符串并在控制器中使用HttpResponse.Write(String),但这是最佳做法吗?

4 个答案:

答案 0 :(得分:4)

我有一个与此类似的功能。我确信有一种“更好”的方法来自动查找传递它的User对象的每个成员,但这种方式有效。

    public ActionResult ExportCSV(List<User> input)
    {
        using (MemoryStream output = new MemoryStream())
        {
            using (StreamWriter writer = new StreamWriter(output, Encoding.UTF8))
            {
                foreach (User user in input)
                {
                    writer.Write(user.firstattribute);
                    writer.Write(",");
                    writer.Write(user.secondattribute);
                    writer.Write(",");
                    writer.Write(user.thirdattribute);
                    writer.Write(",");
                    writer.Write(user.lastattribute);
                    writer.WriteLine();
                }

                writer.Flush();
            }

            output.Position = 0;

            return Controller.File(output, "text/comma-separated-values", "report.csv");
        }
    }

答案 1 :(得分:3)

如果您有流,returning a FileStreamResult可能是在ASP.NET MVC中“最干净”的方式。

答案 2 :(得分:0)

您应手动汇编字符串,然后return Content(str, "text/csv");

答案 3 :(得分:0)

据报道,

LINQ to CSV是一个很好的用于生成CSV内容的库。生成CSV后,使用File Controller方法从您的操作中返回FileStreamResult;这使得您可以将任意流作为响应发送,无论是FileStreamResult还是任何其他类型的Stream