关闭用户控件中的页面级缓存

8

我有一个页面,其中定义了以下缓存:

<%@ OutputCache Duration="60" VaryByParam="None" %>

我有一个用户控件在页面中,但我不希望它被缓存。如何只针对该控件关闭缓存?

1个回答

4

选项一

在您的页面上使用替换控件或API。这使您可以缓存页面上除替换控件包含的部分之外的所有内容。

http://msdn.microsoft.com/en-us/library/ms227429.aspx

一个好的方法是将您的控件实现为简单的服务器控件,将HTML呈现为字符串,但在页面上下文中执行(即使用正确的客户端ID)。Scott Guthrie有一个非常好的例子说明了这个方法。顺便说一下,这也可以很好地与AJAX调用配合使用...

http://weblogs.asp.net/scottgu/archive/2006/10/22/Tip_2F00_Trick_3A00_-Cool-UI-Templating-Technique-to-use-with-ASP.NET-AJAX-for-non_2D00_UpdatePanel-scenarios.aspx

摘自Scott Gu的文章...

    [WebMethod]
    public string GetCustomersByCountry(string country)
    {
       CustomerCollection customers = DataContext.GetCustomersByCountry(country);

        if (customers.Count > 0)
            //RenderView returns the rendered HTML in the context of the callback
            return ViewManager.RenderView("customers.ascx", customers);
        else
            return ViewManager.RenderView("nocustomersfound.ascx");
    }

选项二

通过页面加载时的 AJAX 调用来渲染动态控件。这样,您可以安全地缓存整个页面(包括 AJAX 调用),只有调用的渲染结果在页面之间发生变化。


这适用于相当简单的字符串或HTML输出,但如果您需要任何类型的高级呈现逻辑,则不适用。 - Micah
我能否从替换控件中呈现用户控件? - Micah
可以的。请看我的更新。它也适用于用户控件。 - Daniel Dyson
尝试过的第一种方法是,但问题在于我有一些需要“表单”标签的控件,而该标签位于主页上。显然,以这种方式呈现控件并不知道其包含在哪个主页中,因为它会抛出错误并寻找“表单”控件。 - Micah
1
替换控件常见问题:回调方法中无法使用Session(在Context实例中列出,但始终为null)。 - Jon Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接