将筛选结果导出为在MVC 4(无网页表单)

我无法将筛选结果导出到Excel文件。 我只是学习ASP.Net和MVC。

我已经在这里看过这个build议,但是我无法完成它的工作。 我不是很确定如何使用另一个链接中提到的EditorTemplate。

目前,当我导出时,不pipefilter如何,所有的数据都被导出。 如何将视图上显示的内容导出到Excel文件,而不使用Web窗体?

谢谢..

这是我的看法,Index.cshtml:

@model IEnumerable<ExportToExcel.Models.Student> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") @using (Html.BeginForm("Index","Student",FormMethod.Get)) { <p> Name: @Html.TextBox("NameSearch") <input type="submit" value="Search" /> @Html.ActionLink("Export to Excel","ExportToExcel") </p> } </p> <table class="table"> <tr> <th> @Html.DisplayNameFor(model => model.Name) </th> <th> @Html.DisplayNameFor(model => model.Age) </th> <th> @Html.DisplayNameFor(model => model.Marks) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Name) </td> <td> @Html.DisplayFor(modelItem => item.Age) </td> <td> @Html.DisplayFor(modelItem => item.Marks) </td> <td> @Html.ActionLink("Edit", "Edit", new { id = item.ID }) | @Html.ActionLink("Details", "Details", new { id = item.ID }) | @Html.ActionLink("Delete", "Delete", new { id = item.ID }) </td> </tr> } </table> 

在我的控制器中,我执行了以下操作:

 public ActionResult Index(string nameSearch) { var students = from m in db.Students select m; if (!String.IsNullOrEmpty(nameSearch)) { students = students.Where(n => n.Name.Contains(nameSearch)); } return View(students); } public ActionResult ExportToExcel() { GridView gv = new GridView(); //if (!String.IsNullOrEmpty(nameSearch)) //{ // gv.DataSource = db.Students.Where(n => n.Name.Contains(nameSearch)).ToList(); //} //else //{ // gv.DataSource = db.Students.ToList(); //} gv.DataSource = db.Students.ToList(); gv.DataBind(); Response.Clear(); Response.Buffer = true; Response.ContentType = "application/ms-excel"; Response.AddHeader("content-disposition", "attachment;filename=StudentList.xls"); Response.Charset = ""; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); gv.RenderControl(htw); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); return RedirectToAction("Index"); } 

好吧,设法find答案。 原始链接 。

基本上,将search结果存储在会话中。 然后,在导出期间从会话中检索列表。

  public ActionResult ExportExcel() { var EmployeeList = (List<Employee>)Session["EmployeeList"]; //var EmployeeList = Session["EmployeeList"] as List<Product>; //var EmployeeList = Session["EmployeeList"]; GridView grid = new GridView(); grid.DataSource = EmployeeList; grid.DataBind(); Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment; filename=Employees.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); grid.RenderControl(htw); Response.Output.Write(sw.ToString()); Response.Flush(); Response.End(); return RedirectToAction("Index"); }