多个相同渲染时渲染参数不正确
Rendering parameters incorrect when multiple of same rendering
我在 Sitecore 8 Update 3 中使用 MVC 和 Glass Mapper v4 构建渲染时遇到问题。
我有一个 Feature Promo
渲染,它有一个渲染参数模板 Feature Promo Parameters
,它定义了一个名为 Align
的下拉列表字段,其可能的值为 Left
和 Right
.
在体验编辑器和预览模式下,渲染正确呈现,调试时 RenderingContext.Current["Parameters"]
相应地包含 Align=Left
或 Align=Right
,Glass 将其正确映射到我的 POCO。
但是,在网络模式下,第一次渲染的参数是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"
这似乎是缓存的原因...哦,太可惜了。
渲染 Cacheable
未选中,并且未选择其他缓存设置。
我刚刚将它们更新为 Cacheable
检查并 Vary by Parameters
检查、重新发布并且现在可以正常工作。
我原以为关闭 Cacheable
意味着渲染不会被缓存,但显然不会。
谢谢。
我在 Sitecore 8 Update 3 中使用 MVC 和 Glass Mapper v4 构建渲染时遇到问题。
我有一个 Feature Promo
渲染,它有一个渲染参数模板 Feature Promo Parameters
,它定义了一个名为 Align
的下拉列表字段,其可能的值为 Left
和 Right
.
在体验编辑器和预览模式下,渲染正确呈现,调试时 RenderingContext.Current["Parameters"]
相应地包含 Align=Left
或 Align=Right
,Glass 将其正确映射到我的 POCO。
但是,在网络模式下,第一次渲染的参数是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"
这似乎是缓存的原因...哦,太可惜了。
渲染 Cacheable
未选中,并且未选择其他缓存设置。
我刚刚将它们更新为 Cacheable
检查并 Vary by Parameters
检查、重新发布并且现在可以正常工作。
我原以为关闭 Cacheable
意味着渲染不会被缓存,但显然不会。
谢谢。