Приём параметров в обработчиках страниц¶
Часто обрабочику страницы требуется дополнительная информация о запросе. Эти дополнительные сведения могут содержаться в части 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.
Дата создания : 21 сентября 2022 г.