【问题标题】:Turn off page-level caching in a user control在用户控件中关闭页面级缓存
【发布时间】:2011-03-20 02:45:15
【问题描述】:

我有一个定义了以下缓存的页面:

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

我不想缓存该页面内的用户控件。我怎样才能关闭它只是为了那个控制?

【问题讨论】:

    标签: asp.net .net-4.0 donut-caching page-caching


    【解决方案1】:

    选项一

    在您的页面上使用 替换控件 或 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 输出,但如果您需要任何类型的高级渲染逻辑,则不适用。
    • 我可以从替代控件呈现用户控件吗?
    • 是的,你可以。看我的更新。它也适用于用户控件。
    • 方法#1 我一直在玩,但问题是我的控件需要“表单”标签,而该标签位于母版页中。显然,以这种方式呈现控件不知道它包含的母版页,因为它在寻找“表单”控件时会抛出错误。
    • 替换控件的常见问题: Session 在回调方法中不可用。 (列在 Context 实例中,但始终为 null。)
    猜你喜欢
    • 2017-05-31
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多