如何用程序来即时更新设置了缓存时间的aspx,ascx页 比如:/new/a.aspx/Control/b.ascx这个页都设置了缓存时间为30分钟,比如当后台添加了新数据,又想让这二个页面数据能马上更新,而不是等这二个页面到了更新时间才去自动更新这样的代码怎么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 貌似没有这个问题好的解决办法,前一个项目也遇到了同样的问题,用定时解决的,看了一下腾讯微博,也是通过30秒刷新一次解决的,想想也对,对于客户端来讲,服务器是被动的,只有发出request,服务器才会给个Response,页面,无论aspx,html加载到客户端之后就存在于客户机中了,通过服务器去控制这些页面是不可能的,只有客户机主动发送request。 继承CacheDependency类型而创造自己的缓存依赖系统SqlDataSourceDependency(SqlDataSource上启用EnableCaching并设置缓存依赖的表),只有在表数据修改时才真正读取数据库 Duration本来就是一个“最长时间”意思的。真正会不会使用缓存,就是看会不会设置缓存依赖项,使得后台数据修改时立刻清空缓存脏数据。如果这个不会,只会设置Duration,那就等于不会使用缓存。在asp.net中提供和许多缓存依赖方法。比如SqlDependency,比如VaryByCustom。举个例子:<%@ Page Language="C#" %><%@ OutputCache Duration="6000" VaryByParam="*" VaryByCustom="方案1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <%= DateTime.Now.ToLongTimeString() %> </form></body></html>而Global.asax中写:<%@ Application Language="C#" %><script RunAt="server"> public override string GetVaryByCustomString(HttpContext context, string custom) { switch (custom) { case "方案1": return ((DateTime)(context.Cache["abcd的最后修改时间"] ?? DateTime.Parse("2011/1/1"))).Ticks.ToString(); } return base.GetVaryByCustomString(context, custom); }</script>这样,不需要考虑数据库是否修改,只要当你修改数据时记得去修改一下“Cache["abcd的最后修改时间"]”所记录的时间,这样就让页面立刻刷新了。你可以再创建一个aspx,只有一句代码,在page_load中写Cache["abcd的最后修改时间"] = DateTime.Now;这样当你访问一下这个aspx,就能看到原来那个aspx可以即时刷新了。测试一下!会看别人的东西没有什么价值,会自己写出测试程序才是真懂了。 在上面例子中,我演示了如何让一个输出缓存依赖于一个“Cache["abcd的最后修改时间"]”。你可以修改那个return语句,让它组合多个Cache单元。比如一个页面或者ascx依赖于“汽车频道主列表更新时间、汽车频道栏目广告更新时间”,那么就可以组合多个Cache单元。假设你需要按照当前context中的session取出用户登录信息,好在缓存依赖输出条件上组合“当前用户所在城市”,也是一样去组合到return的字符串里。如果你不知道如何设计输出缓存依赖条件,那么就好好研究 varybycustom 吧! 来学习,有时间看看sp的那个demo。 ASP.NET 如何生成静态页面 网页抓取的问题,aspx页面,post翻页 (急)为什么连接到了数据库,但是无法实现登陆成功?(C#)谢谢 asp.net下载文件的问题,请高手帮忙 散最后30分,求此问题正解,解决立即结贴,在线等 我这个存储过程到底错哪了?救命 如何用javascript在框架中的右边从页面A转到页面B呢?如何写这个javascript呢? 如何计算出两个时间相差的小时数! 怎样更改web自定义控件的图标 谁能给我介绍一下析构函数,构造函数? 将文本数据转换为对应的SQL语句 sql 分组
SqlDataSourceDependency(SqlDataSource上启用EnableCaching并设置缓存依赖的表),只有在表数据修改时才真正读取数据库
<%@ OutputCache Duration="6000" VaryByParam="*" VaryByCustom="方案1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<%= DateTime.Now.ToLongTimeString() %>
</form>
</body>
</html>
而Global.asax中写:<%@ Application Language="C#" %>
<script RunAt="server">
public override string GetVaryByCustomString(HttpContext context, string custom)
{
switch (custom)
{
case "方案1":
return ((DateTime)(context.Cache["abcd的最后修改时间"] ?? DateTime.Parse("2011/1/1"))).Ticks.ToString();
}
return base.GetVaryByCustomString(context, custom);
}
</script>这样,不需要考虑数据库是否修改,只要当你修改数据时记得去修改一下“Cache["abcd的最后修改时间"]”所记录的时间,这样就让页面立刻刷新了。你可以再创建一个aspx,只有一句代码,在page_load中写Cache["abcd的最后修改时间"] = DateTime.Now;这样当你访问一下这个aspx,就能看到原来那个aspx可以即时刷新了。测试一下!会看别人的东西没有什么价值,会自己写出测试程序才是真懂了。