Привязка модели ASP.NET MVC 3 - столкновение ViewBag.Title с вводом id="Title"

Кажется, есть проблема с динамическими свойствами ViewBag. Допустим, у меня есть:

@{
    ViewBag.Title = @Model.CourseName;
}

И тогда в форме на странице у меня есть:

@Html.TextBox("Title", null, new {style="width:400px;"})

Где Название - это имя поля в таблице базы данных.

Когда страница открывается впервые, текстовое поле с идентификатором "Заголовок" принимает значение динамического свойства ViewBag.Title.

Я немного запутался в точных деталях привязки модели, но, похоже, это ошибка, а если нет, то если это происходит естественным образом в результате процесса привязки, то было бы неплохо предупредить о этот.

Обход, который я нашел, состоял в том, чтобы переименовать свойство ViewBag в:

@{
    ViewBag.Titulo = @Model.CourseName;
}

(Название изменено на Titulo - Всегда приятно знать другой язык, чтобы избежать столкновений имен...)

И проблема ушла.

Однако вопрос заключается в следующем:

Можно ли ожидать такого поведения? Эту ошибку было легко найти (потребовался час, чтобы разобраться с ней, включая написание этого вопроса), но я подозреваю, что другие ошибки могут быть более, ммм, второстепенными.

РЕДАКТИРОВАТЬ:

Перефразируя вопрос:

Связывание модели автоматически связывает свойства, которые оно находит в ViewBag? Даже когда существующее свойство существует в строго типизированной ViewModel, которую я передал на страницу? Конечно, ViewModel должен иметь предпочтение?

1 ответ

Решение

Html.TextBox проверяет ViewData/ViewBag сначала значения, потом Model, Чтобы убедиться, что это занимает Model значение, вы должны использовать Html.TextBoxFor,

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