Подтвердить что ты не робот

Как ASP.NET MVC знает, как заполнить вашу модель для подачи вашего действия с контроллером? Отражает ли это отражение?

Определив a Model

public class HomeModel {
    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Surname")]
    public string Surname { get; set; }
}

и имеющий следующий Controller

public class HomeController : Controller {
    [HttpPost]
    public ActionResult Index(HomeModel model) {
        return View(model);
    }

    public ActionResult Index() {

        return View();
    }
}

каким-то "магическим" механизмом HomeModel model заполняется значениями ASP.NET MVC. Кто-нибудь знает, как?

Из некоторых рудиментарных тестов кажется, что он рассмотрит ответ POST и попытается сопоставить имя объектов ответа с вашими свойствами модели. Но для этого я предполагаю, что он должен использовать отражение? Разве это не слишком медленно?

Спасибо

4b9b3361

Ответ 1

Да, вы говорите о волшебстве ModelBinder.

ModelBinder отвечает за создание модели и увлажнение ее со значениями из формы post-back и выполнения проверки, результат которой будет отображаться в ModelState.

Реализация по умолчанию DefaultModelBinder, но вы можете подключить свой собственный.

Ответ 2

DefaultModelBinder действительно использует отражение для установки свойств модели. Чтобы быть более конкретным, он использует метод SetValue класса PropertyDescriptor. Конечно, вы всегда можете создать настраиваемое связующее устройство, чтобы избежать отражения.