Связывание моделей в asp.net mvc Beta1 - PullRequest
7 голосов
/ 07 ноября 2008

Я преобразовал свое веб-приложение из предварительного просмотра 3 в бета1 и теперь пытаюсь использовать новые функции платформы. Одним из них является ModelBinding.

Для этой конкретной ситуации я создал класс, который на данный момент является просто контейнером набора свойств простого типа. Если я создаю форму с несколькими текстовыми полями, я хочу, чтобы инфраструктура заполнила экземпляр SearchBag этими полями.

  • С чего мне начать? Это поведение из коробки или я реализую SearchBagBinder? Я бросил быстрый взгляд в IModelBinder, но не могу обернуть голову вокруг него и DefaultModelBinder источник не сделай меня мудрее.
  • Что это за ModelBindingContext?
  • Как получить доступ к полям формы?
  • Что делать, если значения не передаются по форме, а, введя URL напрямую?
  • Где я могу найти актуальную информацию? информация об этом (большинство блогов устаревшее)? Я думал, что я прочитал пост Филом одно время, но я не могу кажется, больше его не находит.

Любая помощь приветствуется.

1 Ответ

3 голосов
/ 07 ноября 2008
  • С чего мне начать? Это поведение из коробки или я реализую 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 напрямую?

Если вам нужно проверить и Form, и 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, Headers и т. Д.

foreach (var field in context.HttpContext.Request.Params.Keys) {
    var value = context.HttpContext.Request.Params[field];
}
  • Где я могу найти актуальную информацию? информация об этом * (большинство блогов устаревшее)? Я думал, что я прочитал пост Филом в одно время, но я не могу кажется, больше его не находит.

Вы правильно поняли, что Фил - лучшее место для информации, как премьер-министр ASP.NET MVC.

...