Привязка модели ASP.NET MVC 3 - столкновение ViewBag.Title с вводом id = "Title" - PullRequest
5 голосов
/ 24 февраля 2011

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

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

А затем в форме на странице у меня есть:

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

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

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

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

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

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

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

И проблема исчезла.

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

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

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

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

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

1 Ответ

5 голосов
/ 24 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...