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() вызов.

Другие вопросы по тегам