代码之家  ›  专栏  ›  技术社区  ›  Tejas Vaishnav

无法从代码更改SiteCore 8.0(更新3)中的mvc布局

  •  3
  • Tejas Vaishnav  · 技术社区  · 7 年前

    我正在使用布局解析器管道。 我可以调试(&A);查看更改的路径,但无法在UI上更新布局。我看过谷歌发布的各种帖子,他们都在做同样的事情,但都很老了(比2-3岁大)。

      public class LayoutResolver : HttpRequestProcessor
    {
        public LayoutResolver()
        {
            System.Diagnostics.Trace.WriteLine("PipeLine: ctor() has been called");
        }
        /// <summary>
        /// Gets the layout for the page
        /// </summary>
        /// <param name="args"></param>
         public override void Process(HttpRequestArgs args)
        {
            System.Diagnostics.Trace.WriteLine("PipeLine: This is atleast called");
            Assert.ArgumentNotNull(args, "args");
            if (!CanProcess())
            {
                return;
            }
            Context.Page.FilePath = "/Views/Shared/BusinessLayout_Two.cshtml";
        }
    
        private static bool CanProcess()
        {
            return Context.Database != null
                    && !IsCore(Context.Database);
        }
        private static bool IsCore(Database database)
        {
            return database.Name == Constants.CoreDatabaseName;
        }
    }
    

    编辑:showconfig。config在config中显示我的解析器寄存器。 SiteCoreSample.Helpers。LayoutResolver是我的解决方案。

    <processor type="Sitecore.Pipelines.HttpRequest.LayoutResolver, Sitecore.Kernel"/>
    <processor type="SiteCoreSample.Helpers.LayoutResolver, SiteCoreSample" patch:source="Sitecore.Mvc.config"/>
    <processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferMvcLayout, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
    <processor type="Sitecore.Mvc.Pipelines.HttpRequest.TransferControllerRequest, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
    <processor type="Sitecore.ExperienceEditor.Pipelines.HttpRequest.CheckDevice, Sitecore.ExperienceEditor" patch:source="Sitecore.ExperienceEditor.config"/>
    <processor type="Sitecore.Pipelines.HttpRequest.PageEditorHandleNoLayout, Sitecore.ExperienceEditor" patch:source="Sitecore.ExperienceEditor.config"/>
    <processor type="Sitecore.ExperienceExplorer.Business.Pipelines.HttpRequest.ExecuteRequest, Sitecore.ExperienceExplorer.Business" patch:source="Sitecore.ExperienceExplorer.config"/>
    

    Debug screen shot

    1 回复  |  直到 7 年前
        1
  •  5
  •   jammykam    7 年前

    LayoutResolver 您提到的管道仅与Webforms项目相关。。

    Layout 下的项目 /sitecore/layout/Layouts 用于辅助MVC布局。然后创建处理器,根据需要将布局项切换到辅助项:

    using System;
    using Sitecore;
    using Sitecore.Mvc.Pipelines.Response.GetPageRendering;
    
    namespace MyProject.CMS.Custom.Pipelines.GetPageRendering 
    {
        public class GetCustomLayoutRendering : GetPageRenderingProcessor
        {
            public override void Process(GetPageRenderingArgs args)
            {
                if (args.Result == null)
                    return;
    
                if (!ShouldSwitchLayout()) //or whatever your custom logic is
                    return;
    
                args.Result.LayoutId = new Guid("{guid-to-alt-layout}");
                args.Result.Renderer = null;
            }
        }
    }
    

    mvc.getPageRendering

    <mvc.getPageRendering>
      <processor type="MyProject.CMS.Custom.Pipelines.GetPageRendering.GetCustomLayoutRendering, MyProject.CMS.Custom"/>
    </mvc.getPageRendering>
    

    重要的是设置 args.Result.Renderer