Beispiel #1
0
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            if (controllerContext.SelectedViewName == null)
            {
                return(true);
            }

            if (context.IsAjax())
            {
                controllerContext.LayoutNames = null;
            }

            var p        = Path.DirectorySeparatorChar.ToString(CultureInfo.InvariantCulture);
            var template = new TemplateLocation();

            if (context.Request.AcceptHeader != null && context.Request.AcceptHeader.Contains("application/json"))
            {
                template.Area                 = controllerContext.AreaName;
                template.Controller           = controllerContext.Name;
                template.Action               = "json";
                controllerContext.LayoutNames = null;
            }
            else
            {
                var view = context.GetParameter("view");

                template.Area       = controllerContext.AreaName;
                template.Controller = controllerContext.Name;
                template.Action     = string.IsNullOrEmpty(view) ? controllerContext.Action : view;

                if (view == "json")
                {
                    controllerContext.LayoutNames = null;
                }
                else
                {
                    var layout = context.GetParameter("layout");
                    if (context.Services.ViewEngineManager.HasTemplate(p + "layouts" + p + layout))
                    {
                        controllerContext.LayoutNames = new[] { layout };
                    }
                }
            }

            var t = template.ToString();

            if (context.Services.ViewEngineManager.HasTemplate(t))
            {
                controllerContext.SelectedViewName = t;
            }
            else
            {
                template.Area       = null;
                template.Controller = "common";
                t = template.ToString();
                if (context.Services.ViewEngineManager.HasTemplate(t))
                {
                    controllerContext.SelectedViewName = t;
                }
            }
            return(true);
        }