繁体   English   中英

ASP.NET OutputCache和回发

[英]ASP.NET OutputCache and postbacks

我正在尝试理解ASP.NET OutputCache机制。
我用Label和LinkBut​​ton构建了一个测试页面。
标签文本正在服务器上初始化,每个PageLoad上都有当前服务器日期:

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

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

当我第一次在Label中获得一个新文本时按下LinkBut​​ton但是如果我再次按下linkbutton,我就不会得到一个新文本。

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

有没有办法使用OutputCach和回发控件?

是的,你可以通过NO参数改变,所以第一个请求的响应html被缓存并在接下来的10分钟内服务(理论上)。 如果要缓存GET但处理不同的POST,则应根据POST参数进行更改。

让我给你举个例子。 您有一个文本输入用于在POST时发送包含其内容的电子邮件。 如果您根据该输入名称进行了更改,则缓存时间范围内的每个请求与该文本输入的不同值将会触及您的处理程序并处理发送电子邮件。

另一方面,你可以改变*但是你会失去内核模式缓存。

你的假设是正确的。

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网页。

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

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

缓存ASP.NET页面的部分
提示/技巧:使用ASP.NET 2.0输出缓存替换功能实现“Donut Caching”
以编程方式从OutputCache中删除页面

你需要的是缓存后替换:

动态更新缓存页面的部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM