【问题标题】:ASP.NET OutputCache and postbacksASP.NET OutputCache 和回发
【发布时间】:2012-05-09 22:36:11
【问题描述】:

我正在尝试了解 ASP.NET OutputCache 机制。
我用标签和链接按钮构建了一个测试页面。
标签文本正在服务器上使用每个 PageLoad 上的当前服务器日期进行初始化:

protected void Page_Load(object sender, EventArgs e)  
{  
    lblDate.Text = DateTime.Now.ToString();  
}

我使用了这个指令:<%@ OutputCache Duration="600" VaryByParam="none"%>

当我第一次按下链接按钮时,我会在标签中看到一个新文本,但如果我再次按下链接按钮,我不会得到一个新文本。

我认为这是因为传输到服务器的参数对于每个回发都是相同的。

有什么方法可以使用 OutputCach 和回发控件?

【问题讨论】:

    标签: asp.net outputcache


    【解决方案1】:

    是的,问题是您通过 NO 参数进行更改,因此第一个请求的响应 html 被缓存并在接下来的 10 分钟内提供服务(理论上)。如果您想缓存 GET 但处理不同的 POST,您应该根据您的 POST 参数而有所不同。

    让我举个例子。您有一个文本输入,用于在 POST 上发送包含其内容的电子邮件。如果您根据该输入名称进行更改,则在缓存时间跨度内具有该文本输入的不同值的每个请求都会命中您的处理程序并处理发送电子邮件。

    另一方面,您可以通过 * 改变,但您会丢失内核模式缓存。

    【讨论】:

    • 你能发布一个热门示例以使用我的帖子参数作为 VaryByParam 吗?
    • 当然,
    • 在找到这篇文章之前才发现这一点 - 我们实际上在实时推出时遇到了问题,因为我们将 VaryByParam 设置为“none”,页面会发回给自己!
    【解决方案2】:

    你的假设是正确的。

    您的 OutputCache 指令告诉输出缓存机制为特定 URL 缓存整个 呈现的页面 600 秒。

    在您的简单示例中,您可能没有使用任何查询字符串,但是,指令中的 VaryByParam 声明允许您指定查询字符串参数,以确保该参数的每个不同值都被单独缓存。例如,如果您有:

    <%@ OutputCache Duration="600" VaryByParam="ProductID"%>
    

    那么这三个不同的 URL 将分别被单独缓存,并且将“ProductID”参数的值更改为尚未缓存的值将确保页面由 ASP.NET 运行时正确处理和呈现:

    http://www.example.com/viewproduct.aspx?ProductID=123
    http://www.example.com/viewproduct.aspx?ProductID=3
    http://www.example.com/viewproduct.aspx?ProductID=67
    

    在您的示例中,在您单击按钮时,该页面之前已经呈现(并缓存)并且当您再次回发时,您回发并有效重新加载的 URL 没有区别,因此,ASP .NET 运行时将向您显示缓存的页面,而无需重新呈现它。

    除了更改“VaryByParam”参数的值外,OutputCache 指令在页面缓存方面是相当多的“全有或全无”方法。然而,该指令有一个“VaryByContol”属性,它只能用于 ASP.NET 用户控件,而不是一个完整的 ASP.NET 网页。

    从您的问题来看,听起来您更像是需要调查部分页面缓存。当某些事件发生时,该机制或使缓存无效的机制。这通常是通过添加“缓存依赖项”来完成的。

    为此,以下链接应该会有所帮助:

    Caching Portions of an ASP.NET Page
    Tip/Trick: Implement "Donut Caching" with the ASP.NET 2.0 Output Cache Substitution Feature
    Programmatically Removing a Page from the OutputCache

    【讨论】:

      【解决方案3】:

      您需要的是缓存后替换:

      Dynamically Updating Portions of a Cached Page

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-22
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        相关资源
        最近更新 更多