Значение 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.