【发布时间】:2020-09-09 11:07:06
【问题描述】:
我创建了一个使用分页的页面。问题是当我应用过滤器时。它只应用于第一页;当我点击第二页时,过滤器被重置。如果我在第二页应用过滤器,它会带我回到第一页。
以下代码用于我将应用过滤器的索引页面。
<nav aria-label="DemandPaging">
@await this.Component.InvokeAsync("Pager", new { pagingList = this.Model.Esas })
</nav>
<nav aria-label="Paging">
<vc:pager paging-list="@Model" />
</nav>
<form asp-controller="Esa" asp-action="Index" method="post">
<div>
@Html.Label("Filter By:")
@Html.DropDownListFor(model => model.SelectedStatus,
new SelectList(Enum.GetValues(typeof(Status))),
"")
<input type="submit" value="Enter" />
</div>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.EsaProjectId)
</th>
<th>
@Html.DisplayNameFor(model => model.EsaProjectName)
</th>
<th>
@Html.DisplayNameFor(model => model.EmpName)
</th>
<th>
@Html.DisplayNameFor(model => model.Designation)
</th>
<th>
@Html.DisplayNameFor(model => model.StartDate)
</th>
<th>
@Html.DisplayNameFor(model => model.EndDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Billability)
</th>
<th>
@Html.DisplayNameFor(model => model.Location)
</th>
<th>
@Html.DisplayNameFor(model => model.Allocation)
</th>
<th>
@Html.DisplayNameFor(model => model.NblReason)
</th>
<th>
@Html.DisplayNameFor(model => model.Comments)
</th>
<th> @Html.DisplayNameFor(model => model.Status)</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Esas)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.EsaProjectId)
</td>
<td>
@Html.DisplayFor(modelItem => item.EsaProjectName)
</td>
<td>
@Html.DisplayFor(modelItem => item.EmpName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Designation)
</td>
<td>
@Html.DisplayFor(modelItem => item.StartDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.EndDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Billability)
</td>
<td>
@Html.DisplayFor(modelItem => item.Location)
</td>
<td>
@Html.DisplayFor(modelItem => item.Allocation)
</td>
<td>
@Html.DisplayFor(modelItem => item.NblReason)
</td>
<td>
@Html.DisplayFor(modelItem => item.Comments)
</td>
<td>
@Html.DisplayFor(modelItem => item.Status)
</td>
<td>
@*<a asp-action="Edit" asp-route-id="@item.CtsEmpId">Edit</a> |
<a asp-action="Details" asp-route-id="@item.CtsEmpId">Details</a> |
<a asp-action="Delete" asp-route-id="@item.CtsEmpId">Delete</a>*@
</td>
</tr>
}
</tbody>
</table>
</div>
</form>
控制器如下:
public async Task<IActionResult> Index(EsaViewModel viewModel, int page = 1)
{
int pageSize = 8;
var query = _context.Esas.AsNoTracking()
.OrderBy(s => s.EsaProjectId);
Status result = viewModel.SelectedStatus;
if (User.IsInRole("Admin") || User.IsInRole("PMOUser"))
{
if (viewModel.SelectedStatus.ToString() == "")
{
query = from x in _context.Esas
orderby x.Status descending
select x;
}
else
{
query = _context.Esas.AsNoTracking()
.Where(s => s.Status == viewModel.SelectedStatus.ToString())
.OrderBy(s => s.Status);
}
}
viewModel.Esas = await PagingList.CreateAsync(query, pageSize, page);
return View(viewModel);
谁能帮我解决这个问题?如何让过滤器保留下来?
【问题讨论】:
-
您尝试过使用cookies 了吗?可以尝试将过滤器保存在 cookie 中,然后在下一页检索该数据。也可以尝试将过滤器放在url中,然后将url变量传递到下一页。
标签: c# html jquery asp.net asp.net-mvc