我有一个用户控件,我想使用输出缓存,但它使用不同的数据多次。
我考虑过使用VaryByCustom并尝试接收控件的ClientID,但一直无法找到方法。
有没有办法根据ClientID输出缓存用户控件,或者通过其在DOM中的位置来识别它的其他方式?
更新 我试图添加一个隐藏字段并设置输出缓存。对于示例,我将隐藏字段的值设置为Datetime.Now,但它仍然显示相同的usercontrol,而不是两个与内容不同的人。
<%@ OutputCache VaryByControl="hidMyField" Duration="120" %>
<asp:HiddenField runat="server" ID="hidMyField" Value="<%= Datetime.Now.ToString() %>"/>
答案 0 :(得分:2)
其中一种方法是在控件上设置服务器端隐藏字段,将用户控件的客户端ID推入其中,然后将VaryByControl参数与隐藏字段的ID一起使用。
有关更多信息/选项,请参阅讨论相同问题的this MSDN link。
修改强>
出于两个原因,使用Datetime.Now.ToString()
不是一个好主意!如果您看到各种控件的实际值,您会发现它是相同的,因为ToString
将具有最多几秒的值 - 页面上的所有控件实例将具有几乎相同的日期/时间值,可能以毫秒为单位-seconds将给出相同的ToString()
值
第二个问题是DateTime.Now
是非确定性的。要使缓存工作,您需要具有确定性值(在重复调用中不会更改的值) - 否则对于每个页面请求,您将具有不同的值,这将使缓存无效。我建议将用户控件的客户端ID作为值。另一种方法是在用户控件中公开一个属性,并将其设置为运行编号,例如页面中的1,2,3 ..
答案 1 :(得分:1)
将它们嵌套在另一个用户控件中,并将其中的实例放在您希望缓存的位置。