Как мне скачать Excel-файл, звонков из AJAX-вызов, чтобы ASP.NET форму (веб-метода)
How do I able to download excel file by calling from ajax call to asp.net webform (web method) without creating file in server? I have done this in asp.mvc by saving epplus excel package to memory stream which then saved into Tempdata. on Success call I retrieved the data memory stream from temp data and write it out. I do not know how do i achieve something like this in web method? Currently I am doing this by creating a excel file in server and then retrieved the file and write the file out.
Что я уже пробовал:
Below is my code.
[WebMethod] public static string DownloadExcelReport(List<MyReport> reports, string fileName) { ValidationMessage vm = new ValidationMessage(); string urlToInvoke; try { try { ListtoDataTableConverter converter = new ListtoDataTableConverter(); DataTable dt = converter.ToDataTable(reports); string xlfileName = fileName + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx"; string filePath = fileLocation + xlfileName; using (ExcelPackage xlPackage = new ExcelPackage(new FileInfo(filePath))) { ExcelWorksheet ws = xlPackage.Workbook.Worksheets.Add("AdhocStaffReport"); ws.Cells("A1").LoadFromDataTable(dt, true); xlPackage.Save(); } urlToInvoke = Convert.ToString("~/ExcelDownLoadForm.aspx?fn=") + xlfileName; } catch (Exception ex) { vm.stat = 2; vm.message = "Internal Server Error"; throw; } return JsonConvert.SerializeObject(new { Success = true, redirectUrl = VirtualPathUtility.ToAbsolute(urlToInvoke) }); } catch (Exception ex) { //log ex return JsonConvert.SerializeObject(vm); } } //IN ExcelDownLoadForm.Aspx.cs protected void Page_Load(object sender, System.EventArgs e) { try { string fileName = Request.QueryString("fn"); string filePath = ConfigurationManager.AppSettings("ExcelFilePath") + fileName; Response.ContentType = ContentType; Response.AppendHeader("content-disposition", "attachment; filename=" + Path.GetFileName(filePath)); Response.TransmitFile(filePath); Response.Flush(); if (File.Exists(filePath)) File.Delete(filePath); Response.End(); } catch (Exception ex) { if (ex.Message == "Thread was being aborted.") string eatException = ex.Message; // this Exception is due to Response.End() method else { throw; } } }
j snooze
asp.net код выполняется на веб-сервере. Если вы хотите, чтобы все было на клиенте, либо сделайте клиентское приложение, либо выясните, как создать файл excel, используя весь javascript. Веб-страницы предназначены для обмена информацией между сервером и клиентом.
То есть, если я правильно прочитал вашу просьбу.
istudent
Вопрос не в том, чтобы создать файл excel. Вопрос заключается в том, как можно сделать ajax-вызов метода на сервере и при успешном выполнении загрузить файл.
istudent
Я также упомянул, как я достиг того же самого в mvc framework, но я не знаю, как это сделать в веб-форме. Я сделал это, создав файл на сервере, но я хочу создать в потоке памяти вместо создания файла.
j snooze
Извини, мое недоразумение.
Может быть, эта ссылка вам поможет. Похоже, это может быть так же просто, как поместить атрибут [WebMethod] в метод страницы сервера, который вы хотите вызвать.
https://stackoverflow.com/questions/5331986/how-to-use-ajax-with-asp-net-webforms
istudent
Если вы пройдете через код, я вызову PageMethod(WebMethod). Это не был мой вопрос. Но все равно спасибо.