我正在尝试过滤发送到 excel 文件的行。我已经能够弄清楚如何将行数据导出到 Excel,但现在我需要将过滤后的数据发送到 Excel 工作表,因为我添加了一个版本下拉列表。发生的情况是我从下拉列表中选择了我想查看的版本。
前任。版本是12.1。
该视图只会带回与它关联的版本号为 12.1 的数据。现在,当我想在 excel 文件中下载过滤后的行时。我按下下载到 excel 文件按钮,它在 excel 文件中打开文件,除了它带来所有行而不是过滤的行。我认为我所要做的就是将适当的 viewbag 和 viewdata 变量添加到调用中,它会工作,没有这样的运气,它仍然保持每一行。你们能看看我的代码并帮助我找出我做错了什么吗?我已经发布了下面的代码,如果您需要更多信息以更好地诊断,请告诉我,我会经常回来查看!谢谢你的帮助!
Excel 控制器
[Authorize]
public ActionResult PaExcelOutput(string sortField, string currentFilter, string searchString, int? page, string VERS)
{
int pageNumber = (page ?? 1); // start page number
var PaExcel = from P in db.iamp_mapping
select P;
ViewBag.CurrentField = sortField = String.IsNullOrEmpty(sortField) ? "IAMP_PK" : sortField; // Provides the field to sort
ViewBag.CurrentFilter = searchString; // Provides the view with the current filter string
ViewData["SelectedVersion"] = VERS;
ViewData["currentFilter"] = currentFilter;
ViewData["VERS"] = new SelectList(PaExcel.Select(x => x.VERSION).Distinct());
if (!String.IsNullOrEmpty(VERS))
{
PaExcel = PaExcel.Where(p => p.VERSION.ToUpper().Contains(VERS));
}
if (Request.HttpMethod == "GET")
{
searchString = currentFilter; //sets the currentFilter equal to Searchstring
}
else
{
page = 1; // defaults to page 1
}
return View(PaExcel);
}
Excel 输出视图
@model IEnumerable<DBFirstMVC.Models.iamp_mapping>
<!--This is what the MVC uses to output the correct rows to Excel -->
@{
Layout = null;
Response.AddHeader("Content-Type", "application/vnd.ms-excel");
}
<table>
<tr>
<th>
PA
</th>
<th>
VERSION
</th>
<th>
INVESTMENT AREA
</th>
<th>
MAJOR PROGRAM
</th>
<th>
PA SUB PROGRAM
</th>
<th>
VP
</th>
<th>
DIRECTOR
</th>
<th>
SPA
</th>
<th>
PA INITIATIVE
</th>
<th>
NOTES
</th>
<th>
TEAM BC
</th>
<th>
PA CC
</th>
<th>
PA DESCRIPTION
</th>
<th>
PA MANAGER
</th>
<th>
SPA CC
</th>
<th>
TIER 1
</th>
<th>
TIER 2
</th>
<th>
TIER 3
</th>
<th>
TIER 4
</th>
<th>
CFP VIEW NV/NONNV
</th>
<th>
CFP VIEW
</th>
<th>
CREATION DATE
</th>
<th>
CAF PROJECT NAME
</th>
<th>
CAF IA
</th>
<th>
CAF MP
</th>
<th>
CAF LEAD DIR
</th>
<th>
CAF LEAD MGR
</th>
<th>
CAF CC DIR
</th>
<th>
CAF CC MGR
</th>
<th>
CAF CC
</th>
<th>
CAF ID
</th>
<th>
CREATED ON
</th>
<th>
LAST EDITED
</th>
<th>
PROJECT STATUS
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.PA)
</td>
<td>
@Html.DisplayFor(modelItem => item.VERSION)
</td>
<td>
@Html.DisplayFor(modelItem => item.INVESTMENT_AREA)
</td>
<td>
@Html.DisplayFor(modelItem => item.MAJOR_PROGRAM)
</td>
<td>
@Html.DisplayFor(modelItem => item.PA_SUB_PROGRAM)
</td>
<td>
@Html.DisplayFor(modelItem => item.VP)
</td>
<td>
@Html.DisplayFor(modelItem => item.DIRECTOR)
</td>
<td>
@Html.DisplayFor(modelItem => item.SPA)
</td>
<td>
@Html.DisplayFor(modelItem => item.PA_INITIATIVE)
</td>
<td>
@Html.DisplayFor(modelItem => item.NOTES)
</td>
<td>
@Html.DisplayFor(modelItem => item.TEAM_BC)
</td>
<td>
@Html.DisplayFor(modelItem => item.PA_CC)
</td>
<td>
@Html.DisplayFor(modelItem => item.PA_DESCRIPTION)
</td>
<td>
@Html.DisplayFor(modelItem => item.PA_MANAGER)
</td>
<td>
@Html.DisplayFor(modelItem => item.SPA_CC)
</td>
<td>
@Html.DisplayFor(modelItem => item.TIER_1)
</td>
<td>
@Html.DisplayFor(modelItem => item.TIER_2)
</td>
<td>
@Html.DisplayFor(modelItem => item.TIER_3)
</td>
<td>
@Html.DisplayFor(modelItem => item.TIER_4)
</td>
<td>
@Html.DisplayFor(modelItem => item.CFP_VIEW_NV_NONNV)
</td>
<td>
@Html.DisplayFor(modelItem => item.CFP_VIEW)
</td>
<td>
@Html.DisplayFor(modelItem => item.CREATION_DATE)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_PROJECT_NAME)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_IA)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_MP)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_LEAD_DIR)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_LEAD_MGR)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_CC_DIR)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_CC_MGR)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_CC)
</td>
<td>
@Html.DisplayFor(modelItem => item.CAF_ID)
</td>
<td>
@Html.DisplayFor(modelItem => item.CREATED_ON)
</td>
<td>
@Html.DisplayFor(modelItem => item.LAST_EDITED)
</td>
<td>
@Html.DisplayFor(modelItem => item.PROJECT_STATUS)
</td>
</tr>
}
</table>
索引视图
<!--For stack overflow, This is where the actionlink that the download to excel button is located it is at the bottom of this code snippet called PAExcelOutput-->
@model PagedList.IPagedList<DBFirstMVC.Models.iamp_mapping>
@{
ViewBag.Title = "PA Mapping";
}
@using PagedList;
<h2 class="corporate sifr">@ViewBag.Title</h2>
<div class="crossband">
@using (Html.BeginForm())
{
<div class="lefty">
Filter by Version: @Html.DropDownList("VERS", null, "All", new { @class = "text" }) and by Criteria: @Html.TextBox("SearchString", "", new { @class = "text" })
</div>
<input type = "submit" class = "button1" value = "Go" />
}
<div class="righty">
@Html.ActionLink("Add a new PA to the database", "Create", "Pa", null, new { @class = "button1" })
</div>
</div>
<div class="crossband">
<div class="lefty">
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
@Html.Raw(" ");
@Html.ActionLink("< Prev", "", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
@Html.Raw(" ");
@Html.ActionLink(">>", "", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
}
else
{
@:Next >
@Html.Raw(" ")
@:>>
}
</div>
<div class="righty">
Showing Records @Model.FirstItemOnPage to @Model.LastItemOnPage from @Model.TotalItemCount records
</div>
</div>
<table>
<tr>
<th>
@Html.ActionLink("PA", "", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "PA", VERS = ViewBag.SelectedVersion })
@if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "PA")
{<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
@if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "PA")
{<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
</th>
<th>
@Html.ActionLink("MAJOR PROGRAM", "", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "MAJOR_PROGRAM", VERS = ViewBag.SelectedVersion })
@if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "MAJOR_PROGRAM")
{<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
@if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "MAJOR_PROGRAM")
{<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
</th>
<th>
@Html.ActionLink("INVESTMENT AREA", "", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "INVESTMENT_AREA", VERS = ViewBag.SelectedVersion })
@if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "INVESTMENT_AREA")
{<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
@if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "INVESTMENT_AREA")
{<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
</th>
<th>
@Html.ActionLink("Version", "", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "VERSION", VERS = ViewBag.SelectedVersion })
@if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "VERSION")
{<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
@if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "VERSION")
{<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
</th>
<th>
@Html.ActionLink("VP/SR. DIRECTOR", "", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "VP", VERS = ViewBag.SelectedVersion })
@if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "VP")
{<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
@if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "VP")
{<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
</th>
<th>
@Html.ActionLink("DIRECTOR/SR. MGR", "", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "DIRECTOR", VERS = ViewBag.SelectedVersion })
@if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "DIRECTOR")
{<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
@if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "DIRECTOR")
{<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
</th>
<th></th>
</tr>
@{
var row_class = "odd";
}
@foreach (var item in Model)
{
row_class = row_class == "odd" ? "even" : "odd";
<tr class="@row_class">
<td>
@Html.DisplayFor(modelItem => item.PA)
</td>
<td>
@Html.DisplayFor(modelItem => item.MAJOR_PROGRAM)
</td>
<td>
@Html.DisplayFor(modelItem => item.INVESTMENT_AREA)
</td>
<td>
@Html.DisplayFor(modelItem => item.VERSION)
</td>
<td>
@Html.DisplayFor(modelItem => item.VP)
</td>
<td>
@Html.DisplayFor(modelItem => item.DIRECTOR)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.IAMP_PK }) |
@Html.ActionLink("Delete", "Delete", new { id = item.IAMP_PK })
</td>
</tr>
}
</table>
<div class="crossband">
<div class="lefty">
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
@Html.Raw(" ");
@Html.ActionLink("< Prev", "", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
@Html.Raw(" ");
@Html.ActionLink(">>", "", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, VERS = ViewBag.SelectedVersion })
}
else
{
@:Next >
@Html.Raw(" ")
@:>>
}
</div>
<div class="righty">
Showing Records @Model.FirstItemOnPage to @Model.LastItemOnPage from @Model.TotalItemCount records
</div>
</div>
<br/><br/>
<div class="righty">
@Html.ActionLink("Download in Excel Format", "PaExcelOutput", "Pa", new { VERS = ViewBag.SelectedVersion, currentFilter = ViewBag.currentFilter, sortOrder = ViewBag.CurrentSort, @class = "button1" })
</div>