gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:47:23 25 4
gpt4 key购买 nike

我正在尝试通过代码隐藏更改我所有页面在 SiteCore 8.0(更新 3)中的布局。我正在为此使用布局解析器管道。我可以调试并查看更改后的路径,但无法在 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 在配置中显示我的解析器注册。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

最佳答案

由于您使用的是 MVC,因此您需要将处理器添加到一组不同的管道中,您提到的 LayoutResolver 管道仅与 Webforms 项目相关。

我建议您在 /sitecore/layout/Layouts 下为您的辅助 MVC 布局创建另一个 Layout 项目。然后创建处理器,根据需要将布局项切换到次要布局项:

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 设置为 null 很重要,因为这将强制重新获取渲染并使用您刚设置的 ID 中的替代布局。

关于c# - 无法从代码更改 SiteCore 8.0(更新 3)中的 mvc 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45323068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com