如何向Grid.Mvc添加导出function,以便将当前search结果导出为Excel?

关于这个问题有几个问题https://stackoverflow.com/questions/23498689/handle-a-pre-filtered-list-with-grid-mvc和grid.mvc在控制器中使用过滤结果,但没有答案。

我正在使用MVC 4 Grid.MVC的基本示例

@using GridMvc.Html @Html.Grid(Model,"_MyCustomGrid").Columns(columns => { columns.Add(foo => foo.Title).Titled("Custom column title").SetWidth(110); columns.Add(foo => foo.Description).Sortable(true); }).WithPaging(20) 

其中创build一个看起来像这样的网格 –

在这里输入图像描述

一旦用户过滤网格中的数据,我希望他们能够导出到Excel。 我已经阅读了源代码,但是我看不到可以插入的事件。

我find的解决scheme是创build一个控制器和视图返回一个XLS内容types的表。 不幸的是,当你在Excel中打开结果时,你会得到一个警告信息,所以它不是完美的,但它的工作原理。

例如

 // Controllers/TaskController.cs public virtual ActionResult Export () { var tasks = repository.GetAllTasks(); Response.AddHeader("Content-Disposition", "attachment; filename=Tasks.xls"); Response.ContentType = "application/ms-excel"; return PartialView("Export", tasks); } // /Views/Task/Export.cshtml @model IEnumerable<OpuzEleven.Models.Task> @using GridMvc.Html; @(Html.Grid(Model, "_GridExcel") .Named("TaskGrid") .AutoGenerateColumns() .Columns(columns => columns.Add(c => c.UserProfile.FullName).Titled("Created by")) .Sortable(true) .Filterable(true)) // /Shared/_GridExcel.cshtml @using GridMvc.Columns @model GridMvc.IGrid @if (Model == null) { return; } @if (Model.RenderOptions.RenderRowsOnly) { @RenderGridBody(); } else { <div class="grid-mvc" data-lang="@Model.Language" data-gridname="@Model.RenderOptions.GridName" data-selectable="@Model.RenderOptions.Selectable.ToString().ToLower()" data-multiplefilters="@Model.RenderOptions.AllowMultipleFilters.ToString().ToLower()"> <div class="grid-wrap"> <table class="table table-striped grid-table"> @* Draw grid header *@ <thead> @RenderGridHeader() </thead> <tbody> @RenderGridBody() </tbody> </table> </div> </div> } @helper RenderGridBody () { if (!Model.ItemsToDisplay.Any()) { <tr class="grid-empty-text"> <td colspan="@Model.Columns.Count()"> @Model.EmptyGridText </td> </tr> } else { foreach (object item in Model.ItemsToDisplay) { <tr class="grid-row @Model.GetRowCssClasses(item)"> @foreach (GridMvc.Columns.IGridColumn column in Model.Columns) { @column.CellRenderer.Render(column, column.GetCell(item)) } </tr> } } } @helper RenderGridHeader () { <tr> @foreach (GridMvc.Columns.IGridColumn column in Model.Columns) { <th>@column.Title</th> } </tr> } 

注意:所以链接传递的参数用于文件的网格使用此MVC ActionLink从当前的URL添加所有(可选)参数