Перейти к содержанию

Приём параметров в обработчиках страниц

Часто обрабочику страницы требуется дополнительная информация о запросе. Эти дополнительные сведения могут содержаться в части URL-пути, URL-query, заголовках или теле запроса. Процесс извлечения значений из запроса и преобразование их в типы .NET называется привязкой модели.
ASP.NET Core может привязывать в Razor Pages:

  • аргументы метода — если у обработчика страницы есть аргументы метода, значения из запроса используются для создания необходимых параметров;
  • свойства с атрибутом BindProperty. По умолчанию не привязываются для GET-запросов.

Рассмотрим пример кода.

public class SearchModel : PageModel
{
    private readonly SearchService _searchService;
    public SearchModel(SearchService searchService)
    {
        _searchService = searchService;
    }

    [BindProperty]
    public BindingModel Input { get; set; }
    public List<Product> Results { get; set; }

    public void OnGet()
    {
    }

    public IActionResult OnPost(int max)
    {
        if (ModelState.IsValid)
        {
            Results = _searchService.Search(Input.SearchTerm, max);
            return Page();
        }
        return RedirectToPage("./Index");
    }
}

Обработчик OnGet не требует параметров, и возвращает void — это значит, что всегда возвращается связанное представление Razor. Также обратим внимание, что, так как это обработчик запросов с глаголом GET, свойство Input не привязано. (Если требуется привязка свойства и для запросов GET, нужно установить свойство атрибута SupportsGet в true, то есть [BindProperty(SupportsGet = true)])
Обработчик OnPost, наоборот, принимает параметр max. Свойство Input также привязывается, так как это обработчик POST-запроса.

Внимание

В отличие от большинства классов .NET, нельзя использовать перегрузку методов, чтобы иметь на странице Razor несколько обработчиков с одним и тем же именем.

Как только обработчик установит, что параметры запроса являются валидными, он может выполнить бизнес-логику и обработать запрос. По окончании нужно отобразить страницу, поэтому вызывается метод базового класса Page(); Иначе нужно выполнить перенаправление на другую страницу при помощи RedirectToPage().
Обратим внимание, что, так как методы Page() и RedirectToPage() имеют разные возвращаемые типы, возвращаемым типом OnPost должен быть их общий интерфейс IActionResult.


Последнее обновление : 14 апреля 2023 г.
Дата создания : 21 сентября 2022 г.

Комментарии

Комментарии