Asp.net mvc 2 связующие модели, что находится за сценой
Я начинаю с MVC2, и у меня есть простой вопрос:
Если у меня есть типизированное представление с формой внутри, и это текстовое поле создано с помощью лямбда-выражений:
<%: Html.TextBoxFor(e => e.Name)%>
Когда я отправляю эту форму, механизм связывания моделей по умолчанию принимает форму запроса, принимает типизированную модель для представления, сериализует публикуемые данные (как эту модель) и передает ее в действие моего контроллера.
Чтобы попытаться объяснить себя лучше, давайте представим, что у меня есть URL-адрес типа localhost/edittestmodel/ID/1, и в моем действии контроллера есть следующий код:
public ActionResult Edit(int id)
{
TestModel testmodel=new TestModel();
testmodel.Name="texttorenderintotextbox";
//whats the class that place the testmodel properties into the view?
return View(testmodel);
}
Каков ответственный класс для помещения свойства Name моего объекта testmodel в текстовое поле
<%: Html.TextBoxFor(e => e.Name)%>
Заранее спасибо.
С уважением.
Хосе.
2 ответа
Это вспомогательный метод TextBoxFor, который отвечает за генерацию поля ввода из лямбда-выражения.
Представления не имеют ничего общего с запросом POST и привязкой модели
Когда у вас строгие представления типов, тип модели едва используется, чтобы иметь простоту intellisense кода в коде представления (так что вы можете использовать лямбда-выражения, как в вашем примере).
Но когда вы возвращаете данные обратно, ничто не проверяется в представлении. Это проверяется по параметрам действия контроллера, хотя. И если есть параметр с определенным пользовательским типом подшивки модели, эта конкретная подшивка модели используется для обработки входящих данных.
Но чтобы ответить на ваш вопрос: TextBoxFor
проверяет модель вашего строгого типа и генерирует конкретное текстовое поле с правильным атрибутом имени. Таким образом, данные из него будут отправлены обратно под правильным именем поля формы.
Чтобы пойти еще глубже. Это механизм представления, который анализирует ASPX-код представления и запускает все сценарии на стороне сервера, включая Html.TextBoxFor()
вызов.