Asp.net 按clientID更改usercontrol上的输出缓存

Asp.net 按clientID更改usercontrol上的输出缓存,asp.net,asp.net-4.0,outputcache,Asp.net,Asp.net 4.0,Outputcache,我有一个用户控件,我想在其上使用输出缓存,但它在不同的数据中使用了多次 我曾考虑使用VaryByCustom并尝试接收控件的ClientID,但一直没有找到方法 有没有一种方法可以基于ClientID输出缓存usercontrol,或者通过它在DOM中的位置来识别它 更新: 我尝试添加一个隐藏字段并设置输出缓存。例如,我已经将隐藏字段的值设置为Datetime.Now,但它仍然显示相同的usercontrol,而不是内容不同的两个 <%@ OutputCache VaryByControl

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

我曾考虑使用VaryByCustom并尝试接收控件的ClientID,但一直没有找到方法

有没有一种方法可以基于ClientID输出缓存usercontrol,或者通过它在DOM中的位置来识别它

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

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


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

方法之一是在控件上有一个服务器端隐藏字段,将用户控件的客户端ID推入其中,然后使用带有隐藏字段ID的参数

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

编辑
使用
Datetime.Now.ToString()
不是一个好主意,原因有二!如果您看到各种控件的实际值,您会发现它是相同的,因为
ToString
的值最多为秒-页面上的所有控件实例都将具有几乎相同的日期/时间值,可能以毫秒为单位,这将给出相同的
ToString()
值。

第二个问题是
DateTime.Now
是不确定的。要使缓存工作,您需要具有确定性值(在重复调用中不会更改的值)-否则,对于每个页面请求,您将具有不同的值,这将使缓存无效。我建议将用户控件的客户端id作为一个值。另一种方法是在用户控件中公开属性,并将其设置为运行编号,如1,2,3。。从页面上。

我已经试着做了所说的,但没有成功(请参阅更新的问题)。这个解决方案似乎只适用于回发数据?我的问题是,同一个控件在一个页面中添加了两次,但设置不同。如果控件是以正常的方式添加的(),那就不会有问题,但是我的控件是在LoadControl的循环中添加的,这使我在asp.net中遇到了一个错误。请参见此处的更多信息和解决方法: