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>
c#
jquery
asp.net-mvc
csv
Gerard
quelle
quelle
Antworten:
yan.kun war auf dem richtigen Weg, aber das ist viel einfacher.
quelle
<a href="ControllerName/ActionName">Download CSV</a>
Mit MVC können Sie einfach eine Datei wie folgt zurückgeben:
quelle
Neben der Antwort von Biff MaGriff. Um die Datei mit JQuery zu exportieren, leiten Sie den Benutzer auf eine neue Seite um.
quelle
Was passiert, wenn Sie den Stringwriter loswerden:
quelle
In Bezug auf Biff, hier sind einige Verbesserungen, mit denen ich die Methode verwenden kann, um CSV von jQuery / Post auf den Server zu übertragen und als CSV-Eingabeaufforderung an den Benutzer zurückzukehren.
Sie benötigen die Unescape-Zeile, wenn Sie diese aus einem Formular mit Code wie dem folgenden treffen:
quelle
Rufen Sie über eine Schaltfläche in der Ansicht .click auf (rufen Sie ein Java-Skript auf). Von dort aus rufen Sie die Controller-Methode mit window.location.href = 'Controller / Method' auf.
Führen Sie im Controller entweder den Datenbankaufruf aus und rufen Sie die Datentabelle ab, oder rufen Sie eine Methode auf, um die Daten aus der Datenbanktabelle in eine Datentabelle zu übertragen, und führen Sie dann die folgenden Schritte aus:
quelle
Auch wenn Sie Ihr Problem behoben haben, versuchen Sie hier noch einmal, csv mit mvc zu exportieren.
quelle
Ich denke du hast vergessen zu benutzen
unter
bitte prüfen
quelle
Einfache Excel-Datei in MVC 4 erstellen
public ActionResult results () {return File (neues System.Text.UTF8Encoding (). GetBytes ("Zeichenfolgendaten"), "application / csv", "filename.csv"); }}
quelle