Итак, последние несколько недель я работал над страницей, которая извлекает данные из базы данных и создает сетку, основанную на выпадающих списках, которые у меня были, поэтому при использовании 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);
}
}