Экспорт из базы данных в Excel MVC - PullRequest
0 голосов
/ 06 июля 2018

Я новичок в mvc и c #, и я боролся с экспортом из БД в Excel. В представлении у меня есть таблица и кнопка Export, которая вызывает функцию из Home Controller:

<button type="submit" id="export" onclick="Export()">Export to Excel</button>
    <script>
        function Export() {
            $.ajax({
                type: "GET",
                url: "/Home/ExportToExcel",
                success: function(data) { },
                error: function() {
                    ErrorMessage("Error occurred");
                }
            });
        }
    </script>

и это функция от контроллера дома:

public void ExportToExcel()
{
    var y = (from w in db.OrderProducts
             group w by w.IdOrder into TotaledOrder
             select new OrderP
             {
                 IdOrder = TotaledOrder.Key,
                 price = TotaledOrder.Sum(s => s.price)
             }).ToList();

    var result = (from o in db.Orders
                  join h in db.Clients on o.IdClient equals h.IdClient
                  select new OrderRep
                  {
                      IDOrder = o.IdOrder,
                      Data = o.Date,
                      Sum = 0,
                      Name = h.name,
                      Adress = h.adresa
                  }).ToList();

    foreach (var order in result)
    {
        order.Sum = y.Where(q => q.IdOrder == order.IDOrder).Sum(q => q.price);
    }

    string filename = "Orders.xls";
    System.IO.StringWriter tw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
    DataGrid dgGrid = new DataGrid();
    dgGrid.DataSource = result;
    dgGrid.DataBind();

    dgGrid.RenderControl(hw);
    Response.ContentType = "application/vnd.ms-excel";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");

    Response.Write(tw.ToString());
    Response.End();
}

У меня нет ошибок, но файл Excel не создается при нажатии на кнопку. Если бы вы могли указать мне правильное направление, я был бы признателен.

1 Ответ

0 голосов
/ 06 июля 2018

Вы не можете загружать файлы через AJAX - полученные данные попадают в переменную JavaScript внутри страницы, а не в файл на диске пользователя.

Вам необходимо использовать обычный HTTP-запрос. Гиперссылка, которая открывается в новом окне, будет выполнять эту работу (вместо вашей кнопки):

<a href="@Url.Action("ExportToExcel", "Home")" target="_blank">Export to Excel</a>

N.B. Стоит также отметить, что ваш метод действия на самом деле создает строку HTML, а затем отправляет ее для загрузки с расширением «.xls», чтобы создать впечатление, что это файл Excel, если это не так. Excel, конечно, может открывать и читать документы HTML, но это не файл Excel, вы не можете делать с ним все то, что можно сделать с помощью собственного файла Excel. Ваши данные, вероятно, также будут отображаться в веб-браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...