通过clientID对usercontrol进行不同的输出缓存

时间:2011-10-05 06:22:49

标签: asp.net asp.net-4.0 outputcache

我有一个用户控件,我想使用输出缓存,但它使用不同的数据多次。

我考虑过使用VaryByCustom并尝试接收控件的ClientID,但一直无法找到方法。

有没有办法根据ClientID输出缓存用户控件,或者通过其在DOM中的位置来识别它的其他方式?

更新 我试图添加一个隐藏字段并设置输出缓存。对于示例,我将隐藏字段的值设置为Datetime.Now,但它仍然显示相同的usercontrol,而不是两个与内容不同的人。

<%@ OutputCache VaryByControl="hidMyField" Duration="120" %>
<asp:HiddenField runat="server" ID="hidMyField" Value="<%= Datetime.Now.ToString() %>"/>

2 个答案:

答案 0 :(得分:2)

其中一种方法是在控件上设置服务器端隐藏字段,将用户控件的客户端ID推入其中,然后将VaryByControl参数与隐藏字段的ID一起使用。

有关更多信息/选项,请参阅讨论相同问题的this MSDN link

修改
出于两个原因,使用Datetime.Now.ToString()不是一个好主意!如果您看到各种控件的实际值,您会发现它是相同的,因为ToString将具有最多几秒的值 - 页面上的所有控件实例将具有几乎相同的日期/时间值,可能以毫秒为单位-seconds将给出相同的ToString()值 第二个问题是DateTime.Now是非确定性的。要使缓存工作,您需要具有确定性值(在重复调用中不会更改的值) - 否则对于每个页面请求,您将具有不同的值,这将使缓存无效。我建议将用户控件的客户端ID作为值。另一种方法是在用户控件中公开一个属性,并将其设置为运行编号,例如页面中的1,2,3 ..

答案 1 :(得分:1)

将它们嵌套在另一个用户控件中,并将其中的实例放在您希望缓存的位置。