Мы превратили наше приложение в ASP.NET Core, но у меня возникла проблема с правильной заполнением ViewBag. Мы имеем следующий базовый контроллерViewBag не переходит от базового контроллера
public abstract class ControllerBase : Controller
{
public ControllerBase()
{
ViewBag.Title = "MySite";
}
...// lots of other stuff here also
}
Все наши другие контроллеры наследуют от ControllerBase
, но к тому времени, мы получаем к виду и использовать следующие
@{
ViewBag.Title = ViewBag.Title + " - " + Model.PageTitle;
}
Но в зрения ViewBag.Title
равна нулю. Это не вызывает ошибки, но в итоге мы получаем только «- MyPage», а не «MySite - MyPage» для названия браузера.
Все это правильно работало в предыдущей версии .net, просто не работая сейчас в ASP.NET Core. Когда я перехожу к отладчику, я вижу, что вызывается конструктор ControllerBase
, но данные ViewBag не сохраняются.
Это оставляет меня два вопроса:
- Есть ли что-то новое/отличается в ASP.NET Ядра, которые изменили сферу ViewBag?
- Каков наилучший способ исправить это? (Без добавления значения в куче мест.)
Edit: я установить отладчик остановится на первую линии базового контроллера и шагнул с ViewBag.Title
набором, как мои переменные часов. Когда я выхожу, я вижу, что значение get установлено, а затем я перехожу от базового контроллера к конструктору для конкретного контроллера действий. Когда я перехожу через этот конструктор, ViewBag.Title
все еще установлен. Как только я ударил первую строку метода Index()
, ViewBag.Title
превращается в null
.
edit2: Вот простой Foo проект, иллюстрирующий проблему https://github.com/nurdyguy/ViewBagIssue
Как насчет того, чтобы вы прошли через свой код и посмотрели, где 'ViewBag.Title' переписывается? – CodeCaster
Я не вижу, чтобы его переписывали где угодно. В любом месте (кроме базового контроллера) значение равно null. – nurdyguy
И вы уверены, что контроллер, отлаживаемый на самом деле, наследует 'ControllerBase'? В зеркале нет ничего особенного, это просто обычная собственность. Наследование не должно нарушать этого. – CodeCaster