asp.net Кэширование, это меняет само кеширование браузеров или это просто собственная структура данных с похожим именем? - PullRequest
1 голос
/ 29 января 2012

Итак, последние несколько недель я работал над страницей, которая извлекает данные из базы данных и создает сетку, основанную на выпадающих списках, которые у меня были, поэтому при использовании ajax сетка будет меняться в зависимости от ddls.Проблема, с которой я столкнулся, заключалась в том, что во время тестирования я менял значение ddl, переходил по ссылке в данном виде сетки, а затем нажимал назад, чтобы проверить, отображается ли тот же самый вид сетки.Однако отображаемая сетка будет представлять собой набор данных, отличный от того, с чем я только что связался; то, что будет отображаться, это набор данных, с которым я связывался ранее в моем тестировании, или его вообще нет, если это была моя первая попытка.Я должен был бы перезагрузить страницу, чтобы просмотреть то, что я кешировал программно.

Итак, чтобы исправить это, я сделал дополнение к своему событию ddl - я попытался сохранить gridView и значение ddl в кеше изатем при загрузке страницы я проверил, существует ли кэш с этими значениями ключа, и связал эти значения с данными: надеясь, что при нажатии пользователем верного отображения сетки будет отображаться.Это не сработало;мне пришлось принудительно истечь срок действия кэша до того, как мой алгоритм заработал.

Так были ли тогда два вида сетки, которые хранились в кэше, и браузер изначально просто использовал свое собственное отображение ключ / значение?Если да, то почему же, несмотря на то, что я заставляю кеш истечь, мой программный кеширование работает?Какие-либо уточнения?в соответствии с запросом, вот соответствующий код,

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

1 Ответ

3 голосов
/ 29 января 2012

Вы используете разные кэши в разных примерах кода.

Response.Cache - это класс HttpCachePolicy - он устанавливает заголовки HTTP, которые управляют кэшированием - это контролирует прокси икеш браузера.

Второй фрагмент кода в кеше памяти - класс Cache из пространства имен System.Web.Caching.Это находится в области памяти IIS.

Что касается первого - если вы изначально не устанавливали заголовки кэша, вы, вероятно, загружали страницу из кэшей прокси / браузера все это время.На сервере вообще не было бы запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...