#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, и теперь все работает. Спасибо