Я видел статья в Microsoft о добавлении разбиения на страницы в C#. Пошагово следуя этой статье, я столкнулся с некоторыми трудностями при адаптации ее к моему мнению. Я постараюсь лучше объяснить себя, отдав часть своего кода:
Контроллер:
[HttpGet("searchmovie")]
public IActionResult Search(string option, string searchmovie, int? page, string currentFilter)
{
if (search != null)
{
page = 1;
}
else
{
search = currentFilter;
}
SearchViewModel data = new SearchViewModel();
int pageSize = 4;
IEnumerable<SearchDataItemViewModel> searchMovie =
Mapper.Map<IEnumerable<SearchDataItemViewModel>>(_unitOfWork.Movies.GetByString(search));
var searchMoviesP = Helpers.PaginatedList<SearchDataItemViewModel>.CreateAsync(searchMovie,page ?? 1, pageSize);
data.SearchMovie = searchMoviesP;
return View("Search", data));
}
и это мой взгляд:
<li class = "tab-2 tabs-list-item">
<ul>
<li>
<h3 class = "tabs-header">LoremIpsum</h3>
<ul class = "content-full col-1">
@foreach (var mv in Model.SearchMovie)
{
if (mv != null)
{
<li>
<div class = "to-do-desc">
<p>@mv.Text</p>
</div>
</li>
}
else
{
<li><p>No results</p></li>
}
}
</ul>
</li>
</ul>
{
//Website.Helpers.PaginatedList<Website.ViewModels.SearchDataItemViewModel> PaginatedModel = Model as Website.Helpers.PaginatedList<Website.ViewModels.SearchDataItemViewModel>;
//this is what I tried but of course the there was an error of type :
//Cannot convert type 'Website.ViewModels.SearchViewModel' to 'Website.Helpers.PaginatedList<Website.ViewModels.SearchDataItemViewModel>
string prevDisabled = !PaginatedModel.HasPreviousPage ? "disabled" : "";
..string nextDisabled = !PaginatedModel.HasNextPage ? "disabled" : "";
}
<a asp-controller = "Movies" asp-action = "Search"
asp-route-page = "@(PaginatedModel.PageIndex - 1)"
asp-route-currentFilter = "@ViewData["FilterParam"]"
class = "btn btn-default @prevDisabled">
Previous
</a>
<a asp-controller = "Movies" asp-action = "Search"
asp-route-page = "@(PaginatedModel.PageIndex + 1)"
asp-route-currentFilter = "@ViewData["FilterParam"]"
class = "btn btn-default @nextDisabled">
Next
</a>
</li>
Вы, ребята, знаете, какой компонент модели я должен передать представлению в отношении документа Microsoft. Застрял здесь какое-то время, так что некоторые эльфы будут оценены Спасибо !!!
Вы делаете это в своем контроллере:
var searchMoviesP = Helpers.PaginatedList<SearchDataItemViewModel>.CreateAsync(searchMovie,page ?? 1, pageSize);
data.SearchMovie = searchMoviesP;
Итак, список с разбивкой на страницы - это вложенное свойство SearchMovie
вашей модели представления.
Но, на ваш взгляд, вы попробуете это:
Model as Website.Helpers.PaginatedList<Website.ViewModels.SearchDataItemViewModel>
Это не сработает, потому что Model
- это SearchViewModel
. Вместо этого вы хотели бы сделать следующее:
Model.SearchMovie as Website.Helpers.PaginatedList<Website.ViewModels.SearchDataItemViewModel>
Теперь вы получаете доступ к тому же свойству модели, которое вы ранее установили для разбитого на страницы списка.
Вы также должны передать параметр searchmovie
с помощью кнопок. Итак, добавьте asp-route-searchmovie = "@Model.Searchmovie"
к кнопкам и добавьте свойство Searchmovie
к вашему SearchViewModel
, где вы устанавливаете значение из параметра контроллера searchmovie
. Таким образом, текущее значение будет передано запросам с разбивкой по страницам.
Слава богу, я подумал о том же. В любом случае, я стремлюсь однажды стать таким же умным, как ты. Большое спасибо за помощь :) @poke
Ты абсолютно прав @poke. Есть идеи, как заставить работать мои следующие и предыдущие кнопки? Поскольку, когда я нажимаю "Далее", параметр {searchmovie} будет нулевым. Спасибо a loottt :)