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);
        }
    }

asp.net缓存,这会改变浏览器缓存本身吗;s自己的具有类似名称的数据结构

在不同的代码示例中使用不同的缓存。

Response.Cache是一个HttpCachePolicy类,它设置控制缓存的HTTP头,控制代理和浏览器缓存。

内存缓存中的第二个代码片段-来自System.Web.Caching命名空间的Cache类。它位于IIS内存空间中。

关于第一个-如果您最初没有设置缓存头,那么您可能一直在从代理/浏览器缓存加载页面。服务器根本不会被查询。