
我正在我的 MVC 项目中执行导出到 csv 功能。目前,如果我在每个页面上编写代码,它就可以正常工作。但我想避免重复执行集中导出功能的代码。
这是我的控制器代码
public ActionResult Export(string filterBy)
        {
            GridState gs = new GridState();
            gs.Filter = filterBy;
            gs.Page = 1;
            gs.Size = int.MaxValue;
            IEnumerable cities = City.GetAll().AsEnumerable().AsQueryable().ToGridModel(gs).Data;
            MemoryStream output = new MemoryStream();
            StreamWriter writer = new StreamWriter(output, Encoding.UTF8);
            writer.Write("Country Name,");
            writer.Write("State Name,");
            writer.Write("City Name,");
            writer.Write("City STD Code,");
            writer.Write("Is Display");
            writer.WriteLine();
            foreach (CityViewModel city in cities)
            {
                writer.Write(city.CountryName);
                writer.Write(",");
                writer.Write("\"");
                writer.Write(city.StateName);
                writer.Write("\"");
                writer.Write(",");
                writer.Write("\"");
                writer.Write(city.City.Name);
                writer.Write("\"");
                writer.Write(",");
                writer.Write(city.City.STDCode);
                writer.Write("\"");
                writer.Write(",");
                writer.Write(city.City.IsDisplay);
                writer.WriteLine();
            }
            writer.Flush();
            output.Position = 0;
            return File(output, "text/comma-separated-values", "city.csv");
        }
这是我的观点:
@model Telerik.Web.Mvc.GridModel<QuexstERP.BusinessCore.BusinessEntities.SysAdmin.CityViewModel>
@using Telerik.Web.Mvc.UI
@{
    ViewBag.Title = "City List";
}
@(Html.Telerik().Grid(Model.Data)
        .Name("Grid")
        .DataKeys(keys => keys.Add(c => c.City.Id))
            .ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Image).ImageHtmlAttributes(new { style = "margin-left:0", title = "Add" }))
                                .ToolBar(commands => commands
                .Custom()
                .HtmlAttributes(new { id = "TestFilter", onclick = "command_onClick(this)" })
                .Text("Export to csv")
                                        .Action("Export", "City", new { filterBy = "~" }))
            .DataBinding(dataBinding =>
                dataBinding.Server()
                    .Select("Select", "City", new { GridButtonType.Text })
                            .Insert("Create", "City", new { GridButtonType.Text })
                        .Update("Save", "City", new { GridButtonType.Text })
                        .Delete("Delete", "City", new { GridButtonType.Text }))
            .Columns(columns =>
            {
                columns.Command(commands =>
                {
                    commands.Custom("Edit").Action("Edit", "City").ImageHtmlAttributes(new { @class = "t-edit" }).ButtonType(GridButtonType.Image).HtmlAttributes(new { title = "Edit", @class = "RightAlign" });
                }).Width(40).Title("Edit").Visible(OperationHelper.EditOperation);
                columns.Command(commands =>
                {
                    commands.Delete().ButtonType(GridButtonType.Image).HtmlAttributes(new { title = "Delete", @class = "RightAlign" });
                }).Width(40).Title("Delete").Visible(OperationHelper.DeleteOperation);
                columns.Bound(p => p.CountryName).Width(200).Title("Country");
                columns.Bound(p => p.StateName).Width(200).Title("State");
                columns.Bound(p => p.City.Name).Width(310).Title("City");
                columns.Bound(p => p.City.STDCode).Width(200).Title("STD Code");
                columns.Bound(p => p.City.IsDisplay).Width(110).Title("IsDisplay");
            })
            .Pageable()
                .Scrollable()
            .Sortable()
                .Filterable()
                    .Resizable(command => command.Columns(true))
    )
@section HeadContent {
    <script type="text/javascript">
        function command_onClick(e) {
            var grid = $('#Grid').data('tGrid');
            var $cmd = $('#TestFilter');
            // Get its 'href' attribute - the URL where it would navigate to
            var href = $cmd.attr('href');
            // Update the 'filter' parameter with the grids' current filtering state
            href = href.replace(/filterBy=(.*)/, 'filterBy=' + (grid.filterBy || '~'));
            // Update the 'order' parameter with the grids' current ordering state
            href = href.replace(/orderBy=([^&]*)/, 'orderBy=' + (grid.orderBy || '~'));
            // Update the 'page' parameter with the grids' current page
            href = href.replace(/page=([^&]*)/, 'page=' + grid.currentPage);
            // Update the 'href' attribute
            $cmd.attr('href', href);
        }
    </script>
}
我想集中导出到 CSV。我的项目中的许多表格(例如州、国家和国家/地区)都具有导出功能。是否可以编写一个泛型类并将参数传递给它。导出到 csv 是集中完成的???