/// <inheritdoc/> protected override void InitializeRouteParameters(MvcProxyBase proxyControl) { var originalContext = this.Context.Request.RequestContext ?? proxyControl.Page.GetRequestContext(); this.SetControllerRouteParam(proxyControl); var controller = proxyControl.GetController(); if (!FrontendManager.AttributeRouting.HasAttributeRouting(controller.RouteData)) { var paramsMapper = this.GetDefaultParamsMapper(controller); if (paramsMapper != null) { var originalParams = MvcRequestContextBuilder.GetRouteParams(originalContext); var requestContext = proxyControl.RequestContext; var modelProperty = controller.GetType().GetProperty("Model"); if (modelProperty != null) { var model = modelProperty.GetValue(controller, null); var modelUrlKeyProperty = model == null ? null : model.GetType().GetProperty("UrlKeyPrefix"); var modelUrlKeyPrefix = modelUrlKeyProperty == null ? null : (string)modelUrlKeyProperty.GetValue(model, null); var expectedUrlKeyPrefix = string.IsNullOrEmpty(modelUrlKeyPrefix) ? null : "!" + modelUrlKeyPrefix; var currentUrlKeyPrefix = originalParams == null ? null : originalParams.FirstOrDefault(p => p.StartsWith("!", StringComparison.OrdinalIgnoreCase)); if (expectedUrlKeyPrefix == currentUrlKeyPrefix) { paramsMapper.ResolveUrlParams(originalParams, requestContext, modelUrlKeyPrefix); } else { this.GetPrefixParamsMapper(controller).ResolveUrlParams(originalParams, requestContext); RouteHelper.SetUrlParametersResolved(); } } else { paramsMapper.ResolveUrlParams(originalParams, requestContext); } if (!proxyControl.ContentTypeName.IsNullOrEmpty()) { controller.RouteData.Values.Add("contentTypeName", proxyControl.ContentTypeName); } } else { proxyControl.RequestContext.RouteData.Values.Remove(FeatherActionInvoker.ControllerNameKey); base.InitializeRouteParameters(proxyControl); } } else { if (this.ShouldProcessRequest(controller) && FrontendManager.AttributeRouting.UpdateRouteData(this.Context, controller.RouteData)) { //// Attribute routing was successful. RouteHelper.SetUrlParametersResolved(); } } }
/// <inheritdoc/> protected override void InitializeRouteParameters(MvcProxyBase proxyControl) { RouteHelper.SetUrlParametersResolved(false); var originalContext = proxyControl.Context.Request.RequestContext ?? proxyControl.Page.GetRequestContext(); var paramsMapper = this.GetDefaultParamsMapper(proxyControl.Controller); if (paramsMapper != null) { var requestContext = proxyControl.RequestContext; var originalParams = MvcRequestContextBuilder.GetRouteParams(originalContext); var controllerName = SitefinityViewEngine.GetControllerName(proxyControl.Controller); requestContext.RouteData.Values[DynamicUrlParamActionInvoker.ControllerNameKey] = controllerName; paramsMapper.ResolveUrlParams(originalParams, requestContext); proxyControl.Controller.TempData.Add("IsInPureMode", proxyControl.IsInPureMode); if (!proxyControl.ContentTypeName.IsNullOrEmpty()) { proxyControl.Controller.RouteData.Values.Add("contentTypeName", proxyControl.ContentTypeName); } } else { base.InitializeRouteParameters(proxyControl); } }
/// <inheritdoc /> public bool HideListView(RequestContext context) { if (this.HideListViewOnChildDetailsView) { var contentType = this.ContentType; var routeParams = MvcRequestContextBuilder.GetRouteParams(context); var urlParamsString = RouteHelper.GetUrlParameterString(routeParams); if (urlParamsString != null) { var manager = this.GetManager() as DynamicModuleManager; var allTypes = ModuleBuilderManager.GetModules().SelectMany(x => x.Types); var dynamicModuleType = allTypes.FirstOrDefault(x => x.TypeNamespace == contentType.Namespace && x.TypeName == contentType.Name); var dynamicModuleTypesForThisModule = allTypes.Where(x => x.ModuleId == dynamicModuleType.ModuleId).ToList(); var successorTypes = this.GetTypeSuccessors(dynamicModuleTypesForThisModule, dynamicModuleType).Select(c => c.GetFullTypeName()).ToList(); var item = manager.Provider.GetItemsFromUrl(urlParamsString, successorTypes, true).FirstOrDefault(); if (item != null) { return(successorTypes.Contains(item.GetType().FullName)); } } } return(false); }
public virtual IEnumerable <SiteMapNode> GetMvcDetailWidgetVirtualNodes() { var nodes = new List <SiteMapNode>(); var page = HttpContext.Current.Handler as System.Web.UI.Page; if (page == null) { var pageHandlerWrapper = HttpContext.Current.Handler as IHandlerWrapper; if (pageHandlerWrapper != null) { page = pageHandlerWrapper.OriginalHandler as System.Web.UI.Page; } } if (page != null) { var routeParams = MvcRequestContextBuilder.GetRouteParams(page.GetRequestContext()); if (routeParams == null || routeParams.Length == 0) { return(null); } var mvcProxyControls = GetControlsRecusrvive <Telerik.Sitefinity.Mvc.Proxy.MvcControllerProxy>(page); if (mvcProxyControls.Any()) { var contentItemResolver = new ContentDataItemResolver(); foreach (var mvcProxy in mvcProxyControls) { var dataItem = contentItemResolver.GetItemByController(mvcProxy.Controller, routeParams); if (dataItem != null) { var content = dataItem as IContent; var dynamicContent = dataItem as DynamicContent; if (content != null) { if (!string.IsNullOrEmpty(content.Title)) { var siteMapNode = new SiteMapNode( this.provider, dataItem.Id.ToString(), string.Empty, content.Title, content.Description); nodes.Add(siteMapNode); } } else if (dynamicContent != null) { nodes.AddRange(this.GetDynamicContentlVirtualNodes(dynamicContent)); } } } } } return(nodes); }
/// <inheritdoc/> protected override void InitializeRouteParameters(MvcProxyBase proxyControl) { var originalContext = this.Context.Request.RequestContext ?? proxyControl.Page.GetRequestContext(); this.SetControllerRouteParam(proxyControl); var controller = proxyControl.GetController(); if (!FrontendManager.AttributeRouting.HasAttributeRouting(controller.RouteData)) { var paramsMapper = this.GetDefaultParamsMapper(controller); if (paramsMapper != null) { var originalParams = MvcRequestContextBuilder.GetRouteParams(originalContext); var requestContext = proxyControl.RequestContext; paramsMapper.ResolveUrlParams(originalParams, requestContext); if (!proxyControl.ContentTypeName.IsNullOrEmpty()) { controller.RouteData.Values.Add("contentTypeName", proxyControl.ContentTypeName); } } else { proxyControl.RequestContext.RouteData.Values.Remove(DynamicUrlParamActionInvoker.ControllerNameKey); base.InitializeRouteParameters(proxyControl); } } else { if (FrontendManager.AttributeRouting.UpdateRouteData(this.Context, controller.RouteData)) { //// Attribute routing was successful. RouteHelper.SetUrlParametersResolved(); } } controller.TempData.Add("IsInPureMode", proxyControl.IsInPureMode); }