Как 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 и попытается сопоставить имя объектов ответа с вашими свойствами модели. Но для этого я предполагаю, что он должен использовать отражение? Разве это не слишком медленно?
Спасибо
Ответы
Ответ 1
Да, вы говорите о волшебстве ModelBinder
.
ModelBinder
отвечает за создание модели и увлажнение ее со значениями из формы post-back и выполнения проверки, результат которой будет отображаться в ModelState
.
Реализация по умолчанию DefaultModelBinder, но вы можете подключить свой собственный.
Ответ 2
DefaultModelBinder действительно использует отражение для установки свойств модели. Чтобы быть более конкретным, он использует метод SetValue класса PropertyDescriptor. Конечно, вы всегда можете создать настраиваемое связующее устройство, чтобы избежать отражения.