【问题标题】:Rendering parameters incorrect when multiple of same rendering多次相同渲染时渲染参数不正确
【发布时间】:2015-07-15 18:38:07
【问题描述】:

我在 Sitecore 8 Update 3 中使用 MVC 和 Glass Mapper v4 构建渲染时遇到问题。

我有一个Feature Promo 渲染,它有一个渲染参数模板Feature Promo Parameters,它定义了一个名为Align 的下拉列表字段,可能的值是LeftRight

在体验编辑器和预览模式下,渲染正确渲染,在调试 RenderingContext.Current["Parameters"] 时相应地包含 Align=LeftAlign=Right,Glass 将其正确映射到我的 POCO。

但是,在 web 模式下,第一次渲染以 Align=Left 作为其参数,所有相同类型的后续渲染都具有 Align,没有值。

通过 Sitecore Rocks 检查 web 数据库中的布局 XML,我可以看到参数正确:

<r p:p="1" xmlns:p="p" xmlns:s="s">
    <d id="{FE5D7FDF-89C0-4D99-9AA3-B5FBD009C9F3}">
        <r p:before="r[@uid='{CAE5DB0F-1971-4931-939B-9F7DB14AF0F8}']" 
           s:ds="{F63266A5-CC62-4915-9D89-CB01C7A0D05A}" 
           s:id="{6BA52384-D976-499D-8A0D-7F729EB4376B}" 
           s:par="Align=Left" s:ph="main" 
           uid="{4CBD0824-D232-46F9-8763-295D3B493A4F}"/>
        <r p:before="r[@uid='{12A7C72A-1821-4F8D-9A87-745604BE5106}']" 
           s:ds="{C50C7579-3680-46C3-93B2-9429EB9E0100}" 
           s:id="{6BA52384-D976-499D-8A0D-7F729EB4376B}" 
           s:par="Align=Right" s:ph="main" 
           uid="{CAE5DB0F-1971-4931-939B-9F7DB14AF0F8}"/>
        <r p:before="*[1=2]" uid="{12A7C72A-1821-4F8D-9A87-745604BE5106}"/>
    </d>
</r>

无论我做什么,第二个(以及任何后续的相同类型的渲染)都没有得到指定的参数值。

渲染的代码如下:

@model Promo
@{
    var settings = Html.Glass().GetRenderingParameters<FeaturePromoParameters>();
    var alignment = "feature-promo-style-a";
    if (settings != null && settings.Align.EqualsText("Right")) {
        alignment = "feature-promo-style-b";
    }
}

<div class="feature-promo @alignment">
    <div class="layout layout-a">
         <div class="region region-a">
            <div class="region-inner">
                <div class="feature-promo-image-container">
                    @Html.Glass().Editable(m => m.Image)
                </div>
                <div class="block block-size-b feature-promo-text">
                    @if (Html.Glass().IsInEditingMode || !Model.PreTitle.IsEmptyOrNull()) {
                        <div class="pre-title">@Html.Glass().Editable(m => m.PreTitle)</div>
                    }
                    @if (Html.Glass().IsInEditingMode || !Model.Title.IsEmptyOrNull()) {
                        <h2 class="h3 color-a">@Html.Glass().Editable(m => m.Title)</h2>
                    }
                    @Html.Glass().Editable(m => m.Body)
                </div>
            </div>
        </div>
    </div>
</div>

谁能告诉我我做错了什么,或者我是否发现了一个随机错误?

Marek Musielak 更新:

好的,它现在只触发了一次断点——并且具有页面上第一次渲染的 uid:{4CBD0824-D232-46F9-8763-295D3B493A4F}。这可能与动态占位符有关吗?

RenderingContext.CurrentOrNull.Rendering["Parameters"] = "Align=Left"

【问题讨论】:

  • 你能在执行var settings = ...代码之前检查一下RenderingContext.CurrentOrNull.Rendering.UniqueId的值吗?它是否匹配并发渲染的唯一 ID? RenderingContext.CurrentOrNull.Rendering["Parameters"] 的价值是什么?
  • @MarekMusielak 添加了更新。
  • 是否显示其他效果图?还是只是第一个?您可以登录到 sitecore 桌面,切换到网络数据库并查看您项目的演示详细信息吗?您是否有在缺少数据源时隐藏渲染的代码?数据源/模板/其他需要的项目都发布了吗?当你说它在预览模式下工作而不在 Web 模式下工作时,我 90% 确定这都与发布有关。您可以尝试重新发布整个网站。
  • 你能发布 FeaturePromoParameters 的模型吗?
  • 嗨@MichaelEdwards,它是一个简单的POCO,带有一个名为“Align”的字符串属性。 Glass 在这里没有错,我自己的愚蠢和/或 Sitecore 缓存很有趣(请参阅下面的答案)。

标签: sitecore glass-mapper sitecore-mvc sitecore8


【解决方案1】:

这似乎是由于缓存...哦,太可惜了。

渲染未选中Cacheable,并且未选择其他缓存设置。

我刚刚更新了它们以检查 CacheableVary by Parameters,重新发布,现在可以正常工作了。

我原以为关闭 Cacheable 意味着渲染不会被缓存,但显然不会。

谢谢。

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多