I know this question has been asked and answered in several ways, but none of them get to the crux of the matter that I need to understand. In WebForms, we 'subvert' the rendering process and write straight to the Response's output stream. How does one achieve that using a Controller Action, to write CSV to a file for Excel?
Asked
Active
Viewed 3,639 times
4 Answers
4
Just to elaborate on Omu's FileHelpers answer, I was able to combine @shamp00's ideas here with this answer here in order to render a CSV to a FileContentResult
via stream on the fly.
Given a FileHelpers DTO Model like so:
[DelimitedRecord(",")]
public class Foo
{
public string Name { get; set; }
public int Id { get; set; }
}
And a controller action:
public FileContentResult DownloadFoosCSV()
{
var foos = GetFoos(); // IEnumerable<Foo>
var fileHelper = new FileHelperEngine<Foo>();
using (var stream = new MemoryStream())
using (var streamWriter = new StreamWriter(stream, Encoding.UTF8))
{
fileHelper.WriteStream(streamWriter, foos);
streamWriter.Flush();
return File(stream.ToArray(), "application/csv", "NewFoos.csv");
}
}
3
You can try CsvActionResult described at http://develoq.net/2011/export-csv-actionresult-for-asp-net-mvc/

orcy
- 1,304
- 14
- 29
2
Same way you'd write any other file -- use FileResult and it's descendants.

Wyatt Barnett
- 15,573
- 3
- 34
- 53
-
Thank you, now I know how to write any other file as well. – ProfK Aug 23 '10 at 19:55
2
I've been using this: http://www.filehelpers.net/ in an asp.net mvc application, look at the getting started guide, you should get it from there

Marcos Meli
- 3,468
- 24
- 29

Omu
- 69,856
- 92
- 277
- 407