【发布时间】:2016-03-28 16:13:07
【问题描述】:
在 Sitecore 中,我的 Razor 中有一个静态绑定的渲染器:
@Html.Sitecore().Rendering("[item ID]")
这很好用,但我想缓存。所以:
@Html.Sitecore().Rendering("[item ID]", new { Cacheable = true } )
这也有效,并且似乎缓存了大约 60 秒,据我所知,这是默认设置。
我想缓存 20 分钟(1200 秒),但我找不到任何方法来指定它。 Rendering 的第二个参数是一个匿名对象,因此 Intellisense 对此没有帮助。我试过了:
new { Cacheable = true, Duration = 1200 }
new { Cacheable = true, Cache_Duration = 1200 } // Someone said Cache_ was the trick. It wasn't.
改变这些渲染的缓存持续时间的设置是什么?
更新
我反思了一下,但无济于事。该匿名对象的属性被迭代并用于设置Rendering.RenderingProperties 的值。这是一个键/值数据结构,以字符串为键,因此任何缓存设置都不再是强类型的,因此我的反射轨迹很冷。
另一个更新
@sitecore-climber 做了更多的反思,发现RenderingCachingDefiniton 的一个名为Timeout 的属性似乎将Cache_Timeout 键的值解析为Timespan 对象。
但是,我对此的实际测试...
new { Cacheable = true, Cache_Timeout = "00:20:00"}
...似乎没有更改 60 秒缓存超时。这很奇怪,因为您可以在 RenderingCachingDefinition 类中看到解析该匿名对象参数的所有其他属性(Cacheable、VaryByParam 等)。
当然,这可能解析得很好,Sitecore 只是不对结果值做任何事情。但我遵循了 Timeout 属性,根据我的阅读,它准确地用于设置缓存超时。
【问题讨论】:
-
我不认为它开箱即用。你能检查一下这个解决方案吗? reinoudvandalen.nl/blog/…
-
你可以试试 Cache_Timeout 吗?我反编译了代码,TimeOut 属性看起来像: TimeSpan 结果; if (TimeSpan.TryParse(this.Rendering["Cache_Timeout"], out result)) 返回结果;
-
是的,我找到了相同的代码。我已经尝试过了,它似乎不起作用。我把
00:20:00放在那里,它应该可以准确地解析到 20 分钟。我的测试程序:我的 Razor 模板中有一行@DateTime.Now.ToLongTimeString()。我可以一遍又一遍地点击刷新,它仍然大约每 60 秒改变一次。 -
我想知道它是否必须在管道中完成? reinoudvandalen.nl/blog/…
-
我也试过了,但我不确定静态绑定的项目是否会进入管道。这听起来很奇怪,我知道,但在管道中用断点卡住了一步,然后看着一切顺利进行。据我所知,我的四个静态绑定渲染器从未通过。
标签: sitecore