ASP.NET MVC 3 Model Binding - ViewBag.Title clash with input of id="Title"

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

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

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

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

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

При первом открытии страницы текстовое поле с id "Title" принимает значение динамического свойства ViewBag.Title.

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

Решение, которое я нашел, заключается в переименовании свойства ViewBag в:

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

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

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

Однако возникает вопрос:

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

EDIT:

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

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

5
задан awrigley 24 February 2011 в 11:40
поделиться