Я строю относительно простую нумерацию страниц в своем веб-приложении.Обратите внимание, что это строго использует ядро asp.net, и я перестрою его как SPA.
Я уже реализовал нумерацию страниц, но меня смущают две вещи:
- Как несколько кнопок отправки работают так, как работают
- Правильный подход (т. Е. Должен ли я использовать многокнопочный вариант или формы или полностью изменить свой подход)
Многократная отправкаКнопки
<form method="post">
<input type="number" asp-for="PageSize" />
@if (Model.pageParameters?.PreviousPageLink != null)
{
<button type="submit" asp-page-handler="" asp-route-pageNum="@(Model.pageParameters.CurrentPage - 1)" class="btn btn-default">Previous</button>
}
@for (var i = 1; i <= Model.pageParameters?.TotalPages; i++)
{
<button type="submit" asp-route-pageNum="@i" class="btn btn-default">@i</button>
}
@if (Model.pageParameters?.NextPageLink != null)
{
<button type="submit" asp-route-pageNum="@(Model.pageParameters.CurrentPage + 1)" class="btn btn-default">Next</button>
}
</form>
Я нашел вышеупомянутый подход после просмотра нескольких примеров разбивки на страницы https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-2.2&tabs=visual-studio#write-a-basic-form. Вместо нескольких форм используются несколько кнопок отправки с отдельными атрибутами asp-route-{value}
.
Я не знал, что это можно использовать на кнопках.Я думал, что это было больше для тегов ссылки и обеспечения того, чтобы правильные данные были переданы.Однако вышеприведенный подход работает, поскольку он преобразует кнопки, как показано ниже:
<button type="submit" class="btn btn-default" formaction="/MeetingMinutes/1">1</button>
Как происходит преобразование с использованием атрибута asp-route-{value}
?Я знаю, что форма будет по умолчанию отправлять обратно на ту же страницу, поскольку никаких действий не указано. Но как сгенерировать атрибут formaction, чтобы он работал правильно?
Подход с несколькими формами
По сути, это тот же подход, что ивыше, но с использованием нескольких форм:
@for (var i = 1; i <= Model.pageParameters?.TotalPages; i++)
{
<form method="post">
<button type="submit" class="btn btn-default">@i</button>
<input type="hidden" asp-for="PageNum" value="@i" />
<input type="number" asp-for="PageSize" />
</form>
}
Я не слишком заинтересован в этом подходе, поскольку он использует несколько форм, которые могут увеличить объем генерируемого HTML.Но я хотел проверить, является ли это совершенно неправильным подходом или он имеет свою цель.
Примечание: Единственная причина, по которой я не использовал якорные теги для генерации ссылок на страницы, состоит в том, что я хочупользователь должен иметь возможность контролировать количество возвращаемых значений.Отсюда и причина <input type="number" asp-for="PageSize" />
(я, скорее всего, поменяю это на selectlist).Если возможно обработать получение пользовательского ввода через (что-то вроде value="@Userenteredvalueforfield"
), я заменю все на теги привязки.