экспорт в Excel из ajax-запроса asp.net Пользовательский интерфейс MVC kendo

#asp.net #ajax #asp.net-mvc #excel

#asp.net #ajax #asp.net-mvc #excel

Вопрос:

Я работаю над asp.net MVC с пользовательским интерфейсом kendo. Я хочу пользовательскую кнопку для установки данных с определенной даты в Excel. Я не могу использовать «.Excel» в сетке, потому что мне нужно отфильтровать данные перед их установкой.

Я попытался подключиться к методу с помощью ajax-запроса:

  toolbar.Template(
            @<div>
                <label>@WebResources.LogFilterText</label>
                @(Html.Kendo().DatePicker()
                                                .Name("datepicker")
                                                .Value(DateTime.Today)
                                                .Format("dd.MM.yyyy")
                )
                @(Html.Kendo().Button()
                                        .Name("excelButton")
                                        .Events(e => e.Click("getExcel"))
                                        .Content("To Excel")
                )
            </div>
            )
  

это функция javscript:

 function getExcel() {
        var url = '/LogAdmin/GetExcel/';
        $.ajax({
            url: url,
            data: { id: kendo.toString($("#datepicker").data("kendoDatePicker").value(), "dd.MM.yyyy") }, //parameters go here in object literal form
            type: 'GET',
            datatype: 'json',
            success: function (data) {
                alert("da");
                $("#test").html(data);
            },
            error: function () { alert("Error has been accured."); }
        });

    }
  

и вот метод контроллера:

 public ActionResult GetExcel([Bind(Prefix = "id")] string date)
        {

            // result is a valid list from Linq. 
            GridView gridview = new GridView();
            gridview.DataSource = resu<
            gridview.DataBind();

            // Clear all the content from the current response
            Response.ClearContent();
            Response.Buffer = true;
            // set the header
            Response.AddHeader("content-disposition", "attachment; filename = itfunda.xls");
            Response.ContentType = "application/ms-excel";
            Response.Charset = "";
            // create HtmlTextWriter object with StringWriter
            using (StringWriter sw = new StringWriter())
            {
                using (HtmlTextWriter htw = new HtmlTextWriter(sw))
                {
                    // render the GridView to the HtmlTextWriter
                    gridview.RenderControl(htw);
                    // Output the GridView content saved into StringWriter
                    Response.Output.Write(sw.ToString());
                    Response.Flush();
                    Response.End();
                }
            }
            return View();
        }
  

Я не получаю сообщение об ошибке, и я получаю таблицу html. если я покажу это в div, то это будет выглядеть как правильная таблица.
но как сохранить его в Excel? кто-нибудь может мне помочь?

Комментарии:

1. Несколько возможных вариантов: сначала примените фильтр сетки, затем используйте встроенный экспорт, используйте обработку Excel на стороне сервера ( docs. telerik.com/kendo-ui/aspnet-mvc/helpers/grid/excel-export ), используйте событие excelExport для фильтрации данных непосредственно перед их записью в Excel ( docs. telerik.com/kendo-ui/api/javascript/ui /… ), используйте kendo ooxml api для создания xlsx из вашего возвращенного набора данных. Я бы, вероятно, пошел с обработкой на стороне сервера, используя библиотеку обработки документов Telerik, которая должна избегать большинства проблем с большими наборами данных.

2. На самом деле я следую вашему последнему совету «на стороне сервера». Я использовал библиотеку EPPlus, и теперь все работает. Спасибо