Есть много способов сделать это.ActionFilters являются односторонними или в BaseController.
Вам необходимо определить, требуется ли каждое действие, или только определенные действия.
Если вы решите каждое действие,создайте базу контроллера, наследуя от Controller, затем переопределяя OnActionExecuting.В этом методе вы можете делать вызовы, чтобы получать и добавлять данные в viewdata.Например:
public class BaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewData.Add("SiteTitle", "Site title");
base.OnActionExecuting(filterContext);
}
}
Если вы предпочитаете использовать базовую модель представления с этой информацией, лучше переопределить OnActionExectued, где вы можете получить доступ к результатам действий, и изменить базовую модель, чтобы установитьценности.Например:
public class BaseController : Controller
{
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
var result = filterContext.Result as ViewResultBase;
var baseModel = (BaseViewModel) result.ViewData.Model;
baseModel.SiteTitle = "Site Title";
base.OnActionExecuted(filterContext);
}
}
В зависимости от того, хотите ли вы цепочку наследования для ваших моделей представления.Либо работает.Вы также заметите, что я просто установил значения.Используйте любой источник для значений, которые вам нужны.Если вы извлекаете их из базы данных, я бы кэшировал значения, чтобы при каждом действии вы не ударяли по этой базе данных.