很久 有 文章啦,今天分享一 如何在ASP.NET MVC里使用Ajax下 生成文件的方法,以下只是 人心得:
大家都 知道,在ASP.NET MVC里,如果通 Ajax 用后 控制器 ,可以返回一 JSON 象,但并不能直接返回文件(除非刷新 面,那就不是Ajax啦),所以如果想用Ajax生成文件并下 的 ,那只要 生成的文件先保存到服 器上,然後再 文件路 通 JSON返回,之後才可以 行下 , 然由於是 性存放,所以 下 完后就需要 上 除相 的文件。
以下是做法以 生成Excel 例(生成Excel的具 步 我就省略了, 并不是此文章的重 ):
1. 首先 建Action生成Excel文件
[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 = "" });}
2. 建下 用的 Action
[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);}
3. 由於要做到下 完后自 除文件,所以再 建一 Action Filter
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); }}
4. 最后在前 添加 Ajax 用的代 :
// 里我使用了 blockUI 做loading...$.blockUI({ message: '<h3>Please wait a moment...</h3>' }); $.ajax({ type: "POST", url: '@Url.Action("ExportExcel","YourController")', // 用相 的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; }});
5. 完!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。
新闻热点
疑难解答