问题
问题是由 Sitecore.Forms.Mvc.config 文件引起的。我在最初的问题中没有提到 WFFM,因为我认为它不会影响 DMS。
当您在没有 WFFM 的情况下启用 DMS 时,getRenderer 管道如下所示:
<mvc.getRenderer patch:source="Glass.Mapper.Sc.Mvc.config">
<processor type="Sitecore.Mvc.Analytics.Pipelines.Response.GetRenderer.CustomizeRendering, Sitecore.Mvc.Analytics" patch:source="Sitecore.MvcAnalytics.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetViewRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetXsltRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetControllerRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetMethodRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetUrlRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetDefaultRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
</mvc.getRenderer>
您可以在此处看到,第一个条目是分析插入以控制个性化的处理器。如果我们现在启用 Sitecore.Forms.Mvc.config,则此管道将更改为:
<mvc.getRenderer patch:source="Glass.Mapper.Sc.Mvc.config">
<processor type="Sitecore.Forms.Mvc.Pipelines.GetFormControllerRenderer, Sitecore.Forms.Mvc" patch:source="Sitecore.Forms.Mvc.config"/>
<processor type="Sitecore.Mvc.Analytics.Pipelines.Response.GetRenderer.CustomizeRendering, Sitecore.Mvc.Analytics" patch:source="Sitecore.MvcAnalytics.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetViewRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetXsltRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetControllerRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetMethodRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetUrlRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
<processor type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetDefaultRenderer, Sitecore.Mvc" patch:source="Sitecore.Mvc.config"/>
</mvc.getRenderer>
请注意,WFFM Forms MVC 条目将自身插入到管道的开头。这会导致问题,因为它返回一个渲染:
protected override Renderer GetRenderer(Rendering rendering, GetRendererArgs args)
{
if (args.Rendering.RenderingItem.ID != IDs.FormMvcInterpreterID)
return base.GetRenderer(rendering, args);
Tuple<string, string> controllerAndAction = this.GetControllerAndAction(rendering, args);
if (controllerAndAction == null)
return (Renderer) null;
string str1 = controllerAndAction.Item1;
string str2 = controllerAndAction.Item2;
FormControllerRenderer controllerRenderer = new FormControllerRenderer();
controllerRenderer.ControllerName = str1;
controllerRenderer.ActionName = str2;
return (Renderer) controllerRenderer;
}
CustomiseRendering 处理器然后什么都不做,因为有返回的结果,因此不执行个性化:
public override void Process(GetRendererArgs args)
{
Assert.ArgumentNotNull((object) args, "args");
if (args.Result != null || args.Rendering == null || string.IsNullOrEmpty(args.Rendering["RenderingXml"]))
return;
CustomizeRenderingArgs args1 = new CustomizeRenderingArgs(args.Rendering);
args.Result = PipelineService.Get().RunPipeline<CustomizeRenderingArgs, Renderer>("mvc.customizeRendering", args1, (Func<CustomizeRenderingArgs, Renderer>) (pipelineArgs => pipelineArgs.Renderer));
}
原因:
这是由 MVC、Web 表单和 Analytics 配置的加载顺序引起的。默认情况下,它们按以下顺序加载:
- Sitecore.Forms.Mvc.config
- Sitecore.Mvc.config
- Sitecore.MvcAnalytics.config
这是正确的顺序。
解决方案:
解决方案是将 Sitecore.Forms.Mvc.Config 重命名为 y.Sitecore.Forms.Mvc.config 以强制最后加载。