using System.Web.Mvc; namespace Umbraco.Web.Mvc { public static class ControllerContextExtensions { /// /// Tries to get the Umbraco context from the whole ControllerContext hierarchy based on data tokens and if that fails /// it will attempt to fallback to retrieving it from the HttpContext. /// /// /// public static UmbracoContext GetUmbracoContext(this ControllerContext controllerContext) { var umbCtx = controllerContext.RouteData.GetUmbracoContext(); if (umbCtx != null) return umbCtx; if (controllerContext.ParentActionViewContext != null) { //recurse return controllerContext.ParentActionViewContext.GetUmbracoContext(); } //fallback to getting from HttpContext return controllerContext.HttpContext.GetUmbracoContext(); } /// /// Find a data token in the whole ControllerContext hierarchy of execution /// /// /// /// internal static object GetDataTokenInViewContextHierarchy(this ControllerContext controllerContext, string dataTokenName) { if (controllerContext.RouteData.DataTokens.ContainsKey(dataTokenName)) { return controllerContext.RouteData.DataTokens[dataTokenName]; } if (controllerContext.ParentActionViewContext != null) { //recurse! return controllerContext.ParentActionViewContext.GetDataTokenInViewContextHierarchy(dataTokenName); } return null; } } }