ModelBinding в asp.net mvc Beta1
-
06-07-2019 - |
Вопрос
Я преобразовал свое веб-приложение из предварительной версии 3 в бета-версию 1 и теперь пытаюсь использовать новые функции платформы.Один из них — ModelBinding.
Для этой конкретной ситуации я создал класс, который (на данный момент) является просто контейнером с набором свойств простого типа.Если я создаю форму с кучей текстовых полей, я хочу, чтобы платформа заполнила экземпляр SearchBag этими полями.
- С чего мне начать?Это поведение вне коробки или я реализую SearchBagbinder?Я быстро посмотрел на Imodelbinder, но не могу обернуть голову вокруг него, и источник DefaultModelbinder не делает меня мудрее.
- Что такое ModelBindingContext?
- Как получить доступ к полям формы?
- Что если значения не передаются формой, а скорее введя URL -адрес напрямую?
- Где мне найти актуальную информацию об этом (большинство блогов устарели)?Я думал, что когда -то прочитал пост Фила, но я не могу найти его больше.
Любая помощь приветствуется.
Решение
- С чего мне начать?Это поведение вне коробки или я реализую SearchBagbinder?Я быстро посмотрел на Imodelbinder, но не могу обернуть голову вокруг него, и источник DefaultModelbinder не делает меня мудрее.
Это нестандартно.Вы можете использовать UpdateModel или ModelBinder, чтобы добиться того, чего вы хотите.
- Что такое ModelBindingContext?
Он содержит всю необходимую информацию для привязки запроса к вашей модели.Подобно ControllerContext и ActionFilterContext, это, по сути, состояние ModelBinder, содержащее всю информацию, необходимую для выполнения того, что вы хотите, если вы следуете рекомендациям команд ASP.NET MVC относительно того, что должен делать ModelBinder.
- Как получить доступ к полям формы?
context.HttpContext.Request.Forms["myformfield"];
или
foreach (var field in context.HttpContext.Request.Forms.Keys) {
var value = context.HttpContext.Request.Forms[field];
}
- Что если значения не передаются формой, а скорее введя URL -адрес напрямую?
Если вам нужно проверить как форму, так и QueryString, просто просмотрите обе коллекции.
foreach (var field in context.HttpContext.Request.Forms.Keys) {
var value = context.HttpContext.Request.Forms[field];
}
foreach (var field in context.HttpContext.Request.QueryStrings.Keys) {
var value = context.HttpContext.Request.QueryStrings[field];
}
или вы можете пройти через Param, который будет содержать Form, QueryString, заголовки и т. д.
foreach (var field in context.HttpContext.Request.Params.Keys) {
var value = context.HttpContext.Request.Params[field];
}
- Где мне найти актуальную информацию об этом*(большинство блогов устарели)?Я думал, что прочитал пост Филла за один раз, но я не могу найти его больше.
Вы правы, Фил — лучшее место для получения информации в качестве премьер-министра ASP.NET MVC.