Значение ViewBag.Title переопределяет Model.Title для шаблона редактора ASP.NET MVC
Когда я устанавливаю ViewBag.Title
в верхней части шаблона Razor, текстовое поле редактора Model.Title
заполняется с использованием значения ViewBag.Title
вместо ожидаемого значения Model.Title
. Вызов Html.EditorFor(x => Model.Title)
явно не создает такого поведения.
Как предотвратить отображение шаблона моего шаблона ViewBag.Title
без сохранения настраиваемого шаблона редактора для моей модели?
код
@{
ViewBag.Title = "Edit Post " + Model.Title;
}
@Html.EditorFor(x => Model.Title) @* renders "My Title" text box *@
@Html.EditorFor(x => Model) @* renders "Edit Post My Title" text box *@
Ответы
Ответ 1
Значение, используемое Html.EditorFor
, может иметь три места: ModelState
, ViewData
и Model
. Кстати, ViewData
и ViewBag
- одно и то же, два способа взаимодействия с одним и тем же базовым словарем.
Итак, чтобы избежать конфликтов при работе с формами, вы можете либо использовать модель, либо использовать префикс, например ViewBag._Title
.
В этом случае для обмена данными с макетом используется ViewBag.Title
, вы также можете сделать Page.Title
, не беспокоясь об изменении данных просмотра.
Ответ 2
Перемещение назначения ViewBag.Title
в нижней части страницы работало для меня.
Ответ 3
Легкий способ избежать этого - просто не использовать ViewBag
.
ViewBag
- динамический объект, и он имеет приоритет. Но вы можете использовать почти что-нибудь там, и отлаживать его становится сложно.
Нижняя строка: если вам нужно отобразить что-то динамическое, например название, поместите его в Model
.