Remote Excel -Datei in MVC mit AJAX herunterladen: Ein nahtloser Ansatz
Umfangreiche Formulare in MVC müssen häufig Excel -Dateien aus bestimmten Formulardaten generieren. Dieser Artikel zeigt, wie dies mit AJAX effizient erreicht werden kann, wodurch vollständige Aktualisierungen von Seiten vermieden werden.
Die AJAX -Datei -Download -Herausforderung
direktes Herunterladen von Dateien über Ajax ist nicht machbar. Wir brauchen eine Problemumgehung.
Die Lösung: Server-Seite-Dateigenerierung und AJAX-Datenübertragung
Die Lösung umfasst die Verwendung von AJAX zum Senden von Formulardaten an den Server. Der serverseitige Code (z. B. mit Epplus oder NPOI) erstellt die Excel-Datei. Die Datei wird dann als Byte -Array vorübergehend gespeichert und eine Referenz an den Client zurückgegeben. Eine nachfolgende Weiterleitung löst den tatsächlichen Download aus.
Byte -Array -Speicher und Referenzabgabe
Die generierte Excel -Datei wird als Byte -Array im Tempdata -Container gespeichert, das durch eine eindeutige Referenz identifiziert wird. Diese Referenz (zusammen mit dem Dateinamen) wird als JSON an die AJAX -Funktion zurückgesandt. Die AJAX -Funktion leitet dann zu einer separaten Controller -Aktion um, um die Datei von tempdata abzurufen und den Download zu initiieren.
Schritt-für-Schritt-Implementierung
1. Controller -Aktion für die Dateigenerierung:
Diese Aktion empfängt die Formulardaten, generiert die Excel -Datei mit einer Bibliothek wie Epplus, speichert sie in Tempdata als Byte -Array und gibt ein JSON -Objekt mit einer eindeutigen Kennung und dem Dateinamen zurück.
.<code class="language-csharp">public ActionResult PostReportPartial(ReportVM model) { // Generate Excel file using EPPlus or NPOI ExcelPackage workbook = new ExcelPackage(); // ... file generation logic ... // Store file in TempData string handle = Guid.NewGuid().ToString(); TempData[handle] = workbook.GetAsByteArray(); return Json(new { FileGuid = handle, Filename = "ReportOutput.xlsx" }); }</code>
2. Ajax Call und Umleitung:
PostReportPartial
Der AJAX -Aufruf sendet die Formulardaten an die
<code class="language-javascript">$.ajax({ // ... AJAX settings ... success: function (response) { window.location = '/Report/Download?fileGuid=' + response.FileGuid + '&filename=' + response.Filename; } });</code>
3. Controller -Aktion für Datei herunterladen:
Diese Aktion ruft die Datei von Tempdata mit der eindeutigen Bezeichnung ab und sendet sie zum Download an den Client.
<code class="language-csharp">[HttpGet] public ActionResult Download(string fileGuid, string fileName) { if (TempData[fileGuid] != null) { byte[] data = TempData[fileGuid] as byte[]; return File(data, "application/vnd.ms-excel", fileName); } else { return new EmptyResult(); } }</code>
Diese Methode sorgt für effiziente, benutzerfreundliche Excel-Datei-Downloads ohne Seiten-Reloads und nutzt die serverseitige Verarbeitung für eine optimale Leistung. Auf dem Server werden keine physischen Dateien dauerhaft gespeichert.
Das obige ist der detaillierte Inhalt vonWie kann ich Excel -Dateien mit AJAX in MVC ohne Seiten -Reloads herunterladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!