在Sitecore中自定义子布局缓存

| 在Sitecore中使用WebControls时,有一种方法可以自定义缓存行为-覆盖GetCachingID方法。 有没有办法用Sublayouts(UserControls)实现这样的事情?我想添加自定义\“ VaryBy \”选项(例如-\“ Vary By Moon Position \”)。     
已邀请:
是的,默认情况下,子布局缓存可能会因几个不同的条件而异。您可以利用因参数而异来执行此操作。的依据是: 因数据而异 因设备而异 因登录而异 因参数而异 因查询字符串而异 因用户而异 您在此处进行自定义的方法是根据参数变化,然后定义参数是什么。您可以在“演示文稿详细信息”中执行此操作,在其中为项目动态分配子布局(控件属性底部有一个区域来定义参数),也可以通过C#代码进行设置。这是一个使用C#代码将子布局静态分配给布局的示例:
<h1>My website</h1>
<h2>My site is great</h2>
<sc:Sublayout ID=\"slMyControl\" path=\"~/path/to/my/control.ascx\" VaryByParm=\"true\" Cachable=\"true\" runat=\"server\" />
(在上面的代码中要注意的一点是,VaryByParam的属性实际上在Sitecore中是
VaryByParm
,这显然是他们代码中的错字。) 现在在C#中,以编程方式设置参数:
slMyControl.Parameters = \"myKey1=MyVal1&myKey2=myVal2\";
如果可以在C#中获得“月球位置”,则将其转换为字符串并将其分配给参数:
slMyControl.Parameters = \"position=\" + getMoonPosition().ToString();
我最近按查询字符串中显示的月份和年份缓存了日历。没有错误处理的简单示例:
slEventCalendar.Parameters = string.Format(\"m={0}&y={1}\", Request.QueryString[\"m\"], Request.QueryString[\"y\"]);
您最终得到的参数字符串最终将成为实际缓存键的一部分。将此与其他选项耦合起来会因选项的不同而有所不同,它们只是使更复杂的缓存键具有更多条件,从而导致更多缓存实例。一般规则是,按照所需的最少条件进行缓存,这将导致该缓存实例的使用量最多。     

要回复问题请先登录注册