Heim > Backend-Entwicklung > C#.Net-Tutorial > Mit Ajax generierte und heruntergeladene Excel-Datei

Mit Ajax generierte und heruntergeladene Excel-Datei

高洛峰
Freigeben: 2016-11-19 10:39:47
Original
2386 Leute haben es durchsucht

Jeder sollte wissen, dass Sie in ASP.NET MVC, wenn Sie den Hintergrundcontroller über Ajax aufrufen, ein JSON-Objekt zurückgeben können, die Datei jedoch nicht direkt zurückgeben können (es sei denn, Sie aktualisieren die Seite, dann ist es kein Ajax). Wenn Sie also Ajax zum Generieren und Herunterladen einer Datei verwenden möchten, müssen Sie die generierte Datei nur zuerst auf dem Server speichern und dann den Dateipfad über JSON zurückgeben. Anschließend können Sie sie natürlich herunterladen Zwischengespeichert wird, müssen Sie die entsprechenden Dateien sofort löschen.

Das Folgende ist ein Beispiel für die dynamische Generierung von Excel (ich habe die spezifischen Schritte zum Generieren von Excel weggelassen, dies ist nicht der Schwerpunkt dieses Artikels):

Erstellen Sie zunächst eine Aktion um eine Excel-Datei zu generieren

[HttpPost]
public JsonResult ExportExcel()
{
    DataTable dt = DataService.GetData();
    var fileName = "Excel_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xls";
    //將生成的文件保存到服務器的臨時目錄里
    string fullPath = Path.Combine(Server.MapPath("~/temp"), fileName);
 
    using (var exportData = new MemoryStream())
    {
        //如何生成Excel這里就不詳細說明啦,我這里對Excel的操作使用的是 NPOI
        Utility.WriteDataTableToExcel(dt, ".xls", exportData);
 
        FileStream file = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
        exportData.WriteTo(file);
        file.Close();
    }
 
    var errorMessage = "you can return the errors in here!";
 
    //返回生成的文件名
    return Json(new { fileName = fileName, errorMessage = "" });
}
Nach dem Login kopieren

2. Erstellen Sie eine Aktion zum Herunterladen

[HttpGet]
[DeleteFileAttribute] //Action Filter, 下載完后自動刪除文件,這個屬性稍後解釋
public ActionResult Download(string file)
{
    //到服務器臨時文件目錄下載相應的文件
    string fullPath = Path.Combine(Server.MapPath("~/temp"), file);
    //返回文件對象,這里用的是Excel,所以文件頭使用了 "application/vnd.ms-excel"
    return File(fullPath, "application/vnd.ms-excel", file);
}
Nach dem Login kopieren

3. Da Sie die Datei nach dem Herunterladen automatisch löschen möchten, erstellen Sie ein weiterer Aktionsfilter

public class DeleteFileAttribute : ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Flush();
        //將當前filter context轉換成具體操作的文件并獲取文件路徑
        string filePath = (filterContext.Result as FilePathResult).FileName;
        //有文件路徑后就可以直接刪除相關文件了
        System.IO.File.Delete(filePath);
    }
}
Nach dem Login kopieren

4. Fügen Sie abschließend den Ajax-Aufrufcode im Vordergrund hinzu:

//這里我使用了 blockUI 做loading...
$.blockUI({ message: &#39;<h3>Please wait a moment...</h3>&#39; });    
$.ajax({
    type: "POST",
    url: &#39;@Url.Action("ExportExcel","YourController")&#39;, //調用相應的controller/action
    contentType: "application/json; charset=utf-8",
    dataType: "json",
}).done(function (data) {
    //console.log(data.result);
    $.unblockUI();
    //接收返回的文件路徑,此文件這時已保存到服務器上了
    if (data.fileName != "") {
        //通過調用 window.location.href 直接跳轉到下載 action 進行文件下載操作
        window.location.href = "@Url.RouteUrl(new { Controller = "YourController", Action = "Download"})/?file=" + data.fileName;
    }
});
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage