Ich versuche, eine Liste in eine CSV-Datei zu exportieren. Ich habe alles bis zu dem Punkt zum Laufen gebracht, an dem ich in eine Datei in den Antwortstrom schreiben möchte. Das macht nichts.
Hier ist mein Code:
Rufen Sie die Methode von der Seite auf.
$('#btn_export').click(function () {
$.post('NewsLetter/Export');
});
Der Code in der Steuerung lautet wie folgt:
[HttpPost]
public void Export()
{
try
{
var filter = Session[FilterSessionKey] != null ? Session[FilterSessionKey] as SubscriberFilter : new SubscriberFilter();
var predicate = _subscriberService.BuildPredicate(filter);
var compiledPredicate = predicate.Compile();
var filterRecords = _subscriberService.GetSubscribersInGroup().Where(x => !x.IsDeleted).AsEnumerable().Where(compiledPredicate).GroupBy(s => s.Subscriber.EmailAddress).OrderBy(x => x.Key);
ExportAsCSV(filterRecords);
}
catch (Exception exception)
{
Logger.WriteLog(LogLevel.Error, exception);
}
}
private void ExportAsCSV(IEnumerable<IGrouping<String, SubscriberInGroup>> filterRecords)
{
var sw = new StringWriter();
//write the header
sw.WriteLine(String.Format("{0},{1},{2},{3}", CMSMessages.EmailAddress, CMSMessages.Gender, CMSMessages.FirstName, CMSMessages.LastName));
//write every subscriber to the file
var resourceManager = new ResourceManager(typeof(CMSMessages));
foreach (var record in filterRecords.Select(x => x.First().Subscriber))
{
sw.WriteLine(String.Format("{0},{1},{2},{3}", record.EmailAddress, record.Gender.HasValue ? resourceManager.GetString(record.Gender.ToString()) : "", record.FirstName, record.LastName));
}
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=adressenbestand.csv");
Response.ContentType = "text/csv";
Response.Write(sw);
Response.End();
}
Aber nachdem Response.Write(sw)
nichts passiert ist. Ist es überhaupt möglich, eine Datei auf diese Weise zu speichern?
Grüße
Bearbeiten
Die Antwort-Header, die ich sehe, wenn ich auf die Schaltfläche klicke, sind:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/csv; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 2.0
Content-Disposition: attachment; filename=adressenbestand.csv
X-Powered-By: ASP.NET
Date: Wed, 12 Jan 2011 13:05:42 GMT
Content-Length: 113
Welches scheint mir in Ordnung zu sein ..
Bearbeiten
Ich habe den jQuery-Teil entfernt und ihn durch einen Hyperlink ersetzt, und das funktioniert jetzt gut für mich:
<a class="export" href="NewsLetter/Export">exporteren</a>