/// <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);
            }
        }
Esempio n. 2
0
        /// <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();
                }
            }
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <inheritdoc />
        protected override bool TryMatchUrl(string[] urlParams, RequestContext requestContext)
        {
            var selfRouting = this.Controller as IRouteMapper;

            if (urlParams != null && selfRouting != null && selfRouting.TryMapRouteParameters(urlParams, requestContext))
            {
                RouteHelper.SetUrlParametersResolved(true);
                return(true);
            }

            var    controllerName = requestContext.RouteData.Values[DynamicUrlParamActionInvoker.ControllerNameKey] as string;
            string actionName     = null;

            if (requestContext.RouteData.Values.ContainsKey("action"))
            {
                actionName = requestContext.RouteData.Values["action"] as string;
                requestContext.RouteData.Values.Remove("action");
            }

            try
            {
                requestContext.RouteData.Values.Remove(DynamicUrlParamActionInvoker.ControllerNameKey);
                MvcRequestContextBuilder.SetRouteParameters(urlParams, requestContext, this.Controller as Controller, controllerName);
            }
            finally
            {
                if (actionName != null)
                {
                    requestContext.RouteData.Values["action"] = actionName;
                }
            }

            return(true);
        }
        /// <inheritdoc />
        protected override bool TryMatchUrl(string[] urlParams, RequestContext requestContext)
        {
            var controllerName = requestContext.RouteData.Values[DynamicUrlParamActionInvoker.ControllerNameKey] as string;

            requestContext.RouteData.Values.Remove(DynamicUrlParamActionInvoker.ControllerNameKey);
            MvcRequestContextBuilder.SetRouteParameters(urlParams, requestContext, this.Controller as Controller, controllerName);

            return(true);
        }
Esempio n. 6
0
        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);
        }