使用Vary By Control在Repeater中缓存用户控件

时间:2015-03-23 11:32:36

标签: c# asp.net caching user-controls

我正在尝试缓存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

0 个答案:

没有答案