Все мои контроллеры основаны на BaseController, чтобы обмениваться свойствами между ними и переопределять OnActionExecuting для установки некоторых значений на основе маршрута.
Я создаю класс BaseViewData, чтобы сделать то же самое для всех данных моего представления.
На данный момент я заполняю данные представления следующим образом (C #):
var viewData = new BaseViewData
{
Name = "someName",
Language = "aLanguage",
Category = "aCategoryName"
};
Я делаю это при каждом действии, требующем данных представления. Некоторые свойства являются общими, их нужно устанавливать для каждого действия. Есть ли способ установить некоторые свойства в более глобальном масштабе?
Если я создаю экземпляр класса BaseViewData в методе OnActionExecuting в BaseController, как мне получить доступ к свойствам BaseViewData из действия в обычных контроллерах (производных от BaseController)?
Обновление в ответ на Денниса Палмера:
По сути, я делаю это из-за того, что у меня проблема с ViewData ["lang"], которая не заполняется случайным образом по некоторым запросам. ViewData ["lang"] содержит "en", если язык английский, и "ja", если он японский (ну, в любом случае так и должно быть). Я заполняю ViewData ["lang"] внутри OnActionExecuting на BaseController.
На мой взгляд, я обращаюсь к некоторым частичным представлениям на основе языка:
<% Html.RenderPartial(ViewData["lang"] + "/SiteMenu"); %>
Но я случайно получаю сообщения об ошибках с состоянием «Cannot find / SiteMenu», что указывает на то, что ViewData [«lang»] не имеет значения. Я просто не могу найти причину, по которой ViewData ["lang"] не заполняется. Итак, я переписываю сайт, чтобы использовать ТОЛЬКО строго типизированные данные представления (и устанавливаю некоторые жесткие значения по умолчанию). Но если другой способ лучше, я пойду по нему.
Спасибо!