是的,默认情况下,子布局缓存可能会因几个不同的标准而异。您可以利用参数变化来做到这一点。变化范围是:
- 因数据而异
- 因设备而异
- 因登录而异
- 因参数而异
- 因查询字符串而异
- 因用户而异
您在此处进行自定义的方法是“按参数变化”,您可以定义参数是什么。您可以在“演示详细信息”中执行此操作,在其中动态地将子布局分配给项目(控件属性底部有一个部分用于定义参数),或者您可以通过 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 的属性实际上是VaryByParm
在 Sitecore 中,这显然是他们代码中的拼写错误。)
现在在 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"]);
最终得到的参数字符串最终成为实际缓存键的一部分。将其与其他选项相结合,只需使用更多条件创建更复杂的缓存键,从而获得更多缓存实例。一般规则是,按照您需要的最少量的标准进行缓存,这将导致该缓存实例的最大使用量。