В терминах почему это происходит, этот ответ должен объяснить, что здесь происходит.По сути, asp-page-handler
устанавливает URL-адрес действия, который включает в себя ?handler=search
, который затем отбрасывается браузером для запросов GET.
С точки зрения обходных путей я вижу два:
Вариант 1 - Настройка маршрутизации
Взятые прямо из документов, вы можете немного изменить директиву страницы в .cshtml для настройки маршрутизации:
@page "{handler?}"
Этот параметр указывает, что для данной страницы используйте дополнительный сегмент для указания имени обработчика, а не устанавливайте его в качестве параметра строки запроса.Это означает, что ваши звонки изменятся, например, с /PageName?handler=handlerName
на /PageName/Handler
.?
в выражении {handler?}
из фрагмента кода просто указывает, что имя обработчика является необязательным, и поэтому по умолчанию будет, например, OnGetAsync
.
. Эта опция работает, поскольку больше нет запросастроковое значение для браузера в мусорное ведро, но при этом имя обработчика * фиксируется в самом маршруте.
Option 2 - использовать скрытый ввод
При отправке формы с помощью GET на определенный URL-адрес действия браузер создает строку запроса из элементов управления, которые находятся внутри формы.Это дает возможность добавить новое скрытое поле ввода в форму:
<form method="get">
<input type="hidden" name="handler" value="search" />
<input type="text" name="search" />
<input type="submit" value="Ara" />
</form>
Здесь я удалил asp-page-handler
и добавил скрытый ввод, который в итоге установит значение строки запроса:handler
до search
, который создает строку запроса, которая будет соответствовать OnGetSearchAsync
в вашем примере.