Связывание простых типов¶
Рассмотрим простую страницу 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¤cyOUT=EUR&qty=50 |
currencyIn=CAD currencyOut=EUR qty=50 |
Как мы видим, значения формы, если они есть, имеют приоритет даже над значениями маршрута.
Если требуется, связыватель модели автоматически преобразует строку в практически любой примитивный тип, а также всё, что имеет преобразователь типов TypeConverter1 .
-
Подробнее о
TypeConverterсм. в документации ↩
Последнее обновление :
19 апреля 2023 г.
Дата создания : 23 сентября 2022 г.
Дата создания : 23 сентября 2022 г.