Razor Pages - обработка нумерации страниц с помощью нескольких кнопок отправки или нескольких форм. - PullRequest
0 голосов
/ 14 декабря 2018

Я строю относительно простую нумерацию страниц в своем веб-приложении.Обратите внимание, что это строго использует ядро ​​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"), я заменю все на теги привязки.

1 Ответ

0 голосов
/ 14 декабря 2018

Преобразование происходит с использованием атрибута помощника по тегам asp-route: Помощники по тегам в формах в ASP.NET Core

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...