2017-02-16 8 views
0

Im пытается экспортировать документ Excel, созданный из таблицы данных в браузер/клиент. Это отлично работает в коде aspx за файлом, но когда я переместил метод в файл .cs с помощью MVC, метод не генерирует файл excel в панели загрузки браузера, ответ возвращается как текст и закодированные символы в запросе ответ, ниже код в контроллере, не создающий файл (код сохраняет файл на жесткий диск новинки, который работает правильно только не отправляет в браузер)Экспорт файла Excel в браузер - ASP.Net

protected void ExportToExcel_Click(object sender, EventArgs e) 
{ 
    var fromdate = Convert.ToDateTime(DateFrom); 
    var todate = Convert.ToDateTime(DateTo); 
    var type = ddlTransactionType.SelectedValue; 
    var transstatus = P2UFramework.Payment.BrainTree.GetTransactionStatus(type); 

    var transdetails = P2UFramework.Payment.BrainTree.Transactions_ByDate(transstatus, fromdate, todate.AddDays(1)); 

    //var dt = P2UFramework.Utility.Conversion.ListToDataTable.ToDataTable(transdetails); 

    var dt = new DataTable(); 
    dt.Columns.Add("Date"); 
    dt.Columns.Add("TransactionId"); 
    dt.Columns.Add("PatientId"); 
    dt.Columns.Add("PatientDetails"); 
    dt.Columns.Add("Email"); 
    dt.Columns.Add("RxOrderNo"); 
    dt.Columns.Add("PODOrderNo"); 
    dt.Columns.Add("OTCOrderNo"); 
    dt.Columns.Add("BrainTreeTransactionId"); 
    dt.Columns.Add("Amount"); 
    dt.Columns.Add("TransactionStatus"); 


    foreach (var item in transdetails) 
    { 
     dt.Rows.Add(item.TransactionDate, item.P2UTransactionId, item.CustomerId, item.CustomerName, item.Email, item.PrescriptionOrderID, 
      item.PodOrderID, item.OtcOrderID, item.BrainTreeTransactionId, item.Amount, item.Status); 
    } 

    // Export to excel 
    string outputFile = KwibooCommon.DataExtract.Write(dt, Server.MapPath("~/_Assets/"), KwibooCommon.DataExtract.Format.Excel); 

    try 
    { 
     HttpContext.Current.Response.ClearContent(); 
     HttpContext.Current.Response.ClearHeaders(); 
     HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + outputFile.Split('\\').Last()); 
     HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; 
     HttpContext.Current.Response.WriteFile(outputFile); 
     HttpContext.Current.Response.Flush(); 
     HttpContext.Current.Response.Close(); 
    } 
    catch (ThreadAbortException ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     try 
     { 
      File.Delete(outputFile); 
     } 
     catch (Exception) { } 
    } 
} 

ответ

0

Роб,

Вам нужно будет поместить несколько уровней между конечной точкой и, в конечном счете, прочитать файл excel по нескольким причинам.

Во-первых, файлы excel по своей природе чрезвычайно волатильны и не предназначены для конкретных источников данных, таких как SQL или даже Access.

Во-вторых, вы объединяете ряд проблем в один метод, который принадлежит нескольким классам. Возьмите это из опыта, что это будет кошмаром для вас в будущем. Особенно, если вы являетесь гуру VBA, этот файл excel поддерживает макрос, и вам придется поддерживать его продвижение вперед.

Предположим, вам нужно жить в файле excel. Прочтите его в доступ, по крайней мере. Экспресс-экспресс SQL является бесплатным и может легко обрабатывать импорт .csv из коробки. Мастер подключения к серверу в VS может обрабатывать файлы .mdb, если это необходимо. Импортируйте данные, получите план и автоматическое решение для его сохранения. В идеале, у вас есть служба, которая регулярно читает csv из файла excel в SQL.

Я был в ситуации, когда вам приходилось разрабатывать решения только с офисом. Это не весело, но есть способы сделать это лучше.

Имейте класс контроллера, который предоставляет конечную точку и ничего больше. У вас есть уровень обслуживания, который обрабатывает бизнес-логику и имеет слой репозитория, который ничего не делает, кроме как читать из вашего источника данных. Я бы рекомендовал, чтобы это не был файл .mdb, но если это так, VS может справиться с этим.

Надеюсь, я дал вам краткий обзор того, как справиться с ситуацией. Спросите, есть ли у вас какие-либо конкретные вопросы. Я был там, я рад помочь.