asp.net缓存,这会改变浏览器缓存本身吗;s自己的具有类似名称的数据结构
本文关键字:缓存 自己的 数据结构 net 改变 浏览器 asp | 更新日期: 2023-09-27 18:21:58
所以在过去的几周里,我一直在开发一个页面,该页面从数据库中提取数据,并根据我现有的下拉列表创建一个网格视图,所以使用ajax,网格视图会根据ddls而变化。我遇到的问题是,在测试时,我会更改ddl值,我会关注给定网格视图中的一个链接,然后按下返回键查看是否显示了相同的网格视图。然而,显示的gridview将是一个与我刚刚链接的数据集不同的数据集,显示的是我在测试早期链接的数据集中,或者如果这是我的第一次尝试,则根本没有。我必须重新加载页面才能以编程方式查看缓存的内容。
因此,为了解决这个问题,我为我的ddl事件做了一个附录——我试图将gridview和ddl值存储在缓存中,然后在页面加载时,我检查是否存在包含这些键值的缓存,并对这些值进行数据绑定:希望当用户按下后,会显示正确的gridview。它不起作用;在我的算法工作之前,我不得不强制缓存过期。
那么,这两个网格视图当时都存储在缓存中,而浏览器最初只是使用自己的键/值映射吗?如果是这样的话,为什么即使我强制缓存过期,我的编程缓存仍然有效?有什么澄清吗?根据要求,这是涉及的代码,
//here's where i forced the cache to expire
protected override void OnInit(EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);
base.OnInit(e);
}
这是另一个相关的片段
//Here's the code i used to check the value's i put in the cache
if (Cache.Get("gvClassSchedule") != null)
{
IQueryable CachedgvClassSchedule = (IQueryable)Cache.Get("gvClassSchedule");
CachedClassScheduleGv(CachedgvClassSchedule);
}
private void CachedClassScheduleGv(IQueryable CachedgvClassSchedule)
{
gvClassSchedule.DataSource = CachedgvClassSchedule;
ddlClass.SelectedValue = Cache.Get("ddlClassValue").ToString();
gvClassSchedule.DataBind();
gvClassSchedule.Visible = true;
divClassSchedule.Visible = true;
}
我存储ddl值的位置
protected void OnChange_Class(object sender, EventArgs e)
{
if (ddlClass.SelectedValue != "-1")
{
classChanged();
Cache.Insert("ddlClassValue", ddlClass.SelectedValue);
}
else
{
divClassSchedule.Visible = false;
divExperiment.Visible = false;
}
}
我存储数据集的位置
private void classChanged()
{
if (ddlClass.SelectedValue != "-1")
{
Class course = dc.Classes.Single(p => p.ID == Convert.ToInt32(ddlClass.SelectedValue));
ProfHasClassInSemester phcs = dc.ProfHasClassInSemesters.Single(p => p.ClassID.ToString() == ddlClass.SelectedValue && p.SemesterID.ToString() == ddlSemester.SelectedValue);
lblClassAndProfessor.Text = ddlSemester.SelectedItem.Text + ": " + course.ClassName + " - " + phcs.Professor.ProfessorName;
divClassSchedule.Visible = true;
divExperiment.Visible = true;
divAssign.Visible = false;
addMode();
IQueryable queryClassSchedule = fillClassScheduleGv(course);
fillExperimentsddl();
Session["ddlClass"] = ddlClass.SelectedValue;
Cache.Remove("gvClassSchedule");
Cache.Insert("gvClassSchedule", queryClassSchedule);
}
}
在不同的代码示例中使用不同的缓存。
Response.Cache
是一个HttpCachePolicy
类,它设置控制缓存的HTTP头,控制代理和浏览器缓存。
内存缓存中的第二个代码片段-来自System.Web.Caching
命名空间的Cache
类。它位于IIS内存空间中。
关于第一个-如果您最初没有设置缓存头,那么您可能一直在从代理/浏览器缓存加载页面。服务器根本不会被查询。