我正在尝试缓存userControls
中显示的多个Repeater
,即一个usercontrol
位于ItemTemplate
的每个Repeater
内。
userControl
传递了一个自定义属性,在这种情况下(在电子商务网站中),它是Product对象。
我最初考虑过使用VaryByCustom
属性,但是在Global类的覆盖GetVaryByCustomString
方法中,我无法访问Product的ID,所以我认为这不起作用。< / p>
然后我看了VaryByControl
作为选项。在我希望缓存的用户控件中,我添加了HiddenField
,然后以HiddenField
方法编程Load
的ID(我尝试了Init和CreateChildControls
),就像这样:
<%@ OutputCache Duration="3600" VaryByParam="None" VaryByControl="ProductIdHiddenField" %>
然后在代码隐藏中:
protected override void CreateChildControls()
{
this.ProductIdHiddenField.ID = string.Concat(ProductIdHiddenField, "_", Product.ProductId, "_", Product.GetCategories().FirstOrDefault().CategoryId);
}
然而,这似乎不太早发生,因此尽管我在网站上访问了哪个页面,但Repeater
中第一个位置显示的产品总是相同的,即类别页面与类别之间应该不同页面,因为它们包含不同的产品。
我是以错误的方式解决这个问题吗?
我试图实现的基本结果是usercontrol被传递到Product
的{{1}}属性缓存。
非常感谢提前 dotdev