Вопрос

Я преобразовал свое веб-приложение из предварительной версии 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top