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

Связывание простых типов

Рассмотрим простую страницу Razor

public class CalculateSquareModel : PageModel
{
    public void OnGet(int number)
    {
        Square = number * number;
    }
    public int Square { get; set; }
}

Добавим сегмент {number} в директиву @Page: @Page "{number}" для получения шаблона маршрута CalculateSquare/{number}. Когда клиент запрашивает URL-адрес /CalculateSquare/5, в процессе маршрутизации получим значение маршрута number=5. В процессе выполнения обработчика страницы, ожидаемый параметр будет найден среди значений маршрута, и значение будет передано в метод.
Для создания модели привязки фреймворк обходит источники привязки по порядку, пытаясь найти соответствующие пары “имя-значение”. Если подходящей пары не нашлось, создаются типы со значениями по умолчанию (default(T)).
Теперь рассмотрим страницу с несколькими параметрами.
public class ConvertModel : PageModel
{
    public void OnPost( //В оригинале OnGet, хотя далее упоминается отправка формы
        string currencyIn,
        string currencyOut,
        int qty)
    {...}
}

Как будут заполнены параметры в зависимости от того, где они переданы

URL (значения маршрута) Тело HTTP (значения формы) Привязанные значения параметров
/GBP/USD currencyIn=GBP
currencyOut=USD
qty=0
/GBP/USD?currencyIn=CAD QTY=50 currencyIn=GBP
currencyOut=USD
qty=50
/GBP/USD?qty=100 qty=50 currencyIn=GBP
currencyOut=USD
qty=50
/GBP/USD?qty=100 currencyIn=CAD&currencyOUT=EUR&qty=50 currencyIn=CAD
currencyOut=EUR
qty=50

Как мы видим, значения формы, если они есть, имеют приоритет даже над значениями маршрута.
Если требуется, связыватель модели автоматически преобразует строку в практически любой примитивный тип, а также всё, что имеет преобразователь типов TypeConverter1 .


  1. Подробнее о TypeConverter см. в документации 


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

Комментарии

Комментарии