Я думаю, что я правильно добавил рефлексирующий фреймворк, но он все еще не работает должным образом, он фактически отображает страницы и фильтрация работает, но когда я использую сортировку, она не работает, ни вторая третья, ни любая страница, кроме первой .
public async Task<IActionResult> MenageUsers(string filter, int page = 1,string sortExpression = "UserName")
{
var qry = _userManager.Users.AsNoTracking().AsQueryable();
if (!string.IsNullOrWhiteSpace(filter))
{
qry = qry.Where(p => p.UserName.Contains(filter) || p.Name.Contains(filter) || p.SurName.Contains(filter)
|| p.Email.Contains(filter) );
}
var model = await PagingList.CreateAsync(
qry, 10, page, sortExpression, "UserName");
model.RouteValue = new RouteValueDictionary {
{ "filter", filter}
};
return View(model);
}
Представление
@model ReflectionIT.Mvc.Paging.PagingList<ProjectiWebFinal.Data.ApplicationUser>
@using ReflectionIT.Mvc.Paging
@addTagHelper *, ReflectionIT.Mvc.Paging
@{
ViewData["Title"] = "Home Page";
var user = (List<ApplicationUser>)ViewData["users"];
}
@using ProjectiWebFinal.Data
<a asp-action="CreateUser">CreateUser</a>
<form method="get" class="form-inline">
<input name="filter" class="form-control" placeholder="filter"
value="@Model.RouteValue["Filter"]" />
<button type="submit" class="btn btn-info">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span> Search
</button>
</form>
<nav aria-label="Products navigation example">
<vc:pager paging-list="@Model" />
</nav>
<table id="" class="table">
<thead>
<tr>
<th>
@Html.SortableHeaderFor(model => model.Id, this.Model)
</th>
<th>
@Html.SortableHeaderFor(model => model.UserName, this.Model)
</th>
<th>
@Html.SortableHeaderFor(model => model.Email, this.Model)
</th>
<th>
@Html.SortableHeaderFor(model => model.Name, this.Model)
</th>
<th>
@Html.SortableHeaderFor(model => model.SurName, this.Model)
</th>
<th>
@Html.SortableHeaderFor(model => model.Gender, this.Model)
</th>
<th>
@Html.SortableHeaderFor(model => model.Coins, this.Model)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.SurName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Gender)
</td>
<td>
@Html.DisplayFor(modelItem => item.Coins)
</td>
<td>
<a asp-controller="Admin" asp-action="EditUser" asp-route-id="@item.Id">EditUser</a>
<a asp-controller="Admin" asp-action="DeleteUser" asp-route-id="@item.Id">DeleteUser</a>
</td>
</tr>
}
</tbody>
</table>
Я также добавил services.AddPaging (), но сначала я запустил программу без нее, потому что я забыл ее, затем добавил и сохранил его, но ничего не изменилось.
Под изображением происходящего.
Обновление
для всех, у кого возникла эта проблема, посмотрите на URL, в моем случае там написано: Admin / Index? Filter .... insted of Admin / ManageUsers эта проблема вызвана тем, что класс PageList по умолчанию имеет Action = "Index", поэтому измените его на имя действия одним способом, как я использовал var model = await PagingList.CreateAsyn c .... write model. Действие = "YourActionOrPageName"