istudent Ответов: 0

Как мне скачать 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). Это не был мой вопрос. Но все равно спасибо.

0 Ответов