Internet Explorer отображает данные кэша после Ajax Pull с результатом 304

У меня есть инструмент, который отлично работает в Chrome и FF. Но в любых версиях IE браузер отображает информацию о кэше, а не выполняет Ajax pull для получения данных.

Вот моя установка:

У меня есть критерии, по которым я выполняю цикл:

@foreach (var item in Model)
{
        <div class="sizeTDCriteria">
            @Html.DisplayFor(modelItem => item.Text)
        </div>
        <div class="sizeTDCriteriaAction">
            @Ajax.ImageActionLink(Url.Content("~/Content/images/icons/edit.png"), "Edit Criteria", "AddOrEditCriteria", "Management", new { competencySectionId = ViewBag.competencySectionId, criteriaId = item.Id }, new AjaxOptions { UpdateTargetId = "AddOrEditCriteriaFormContainer" }, new { @class = "iconPosition" })
            @Ajax.ImageActionLink(Url.Content("~/Content/images/icons/delete.png"), "Delete Criteria", "RemoveCriteria", "Management", new { criteriaId = item.Id }, new AjaxOptions { UpdateTargetId = "CompetenciesManagementWrapper" }, new { @class = "iconPosition" })
        </div>
}

ImageActionLink - это просто помощник, который создает ActionLink с изображением внутри, я пробовал делать это с обычным ActionLink и проблема также возникает, так что вы можете игнорировать это. Я также попытался заменить весь ImageActionLink обычным с помощью триггера jQuery без разницы.

Что происходит: когда пользователь нажимает на ссылку Edit, он выполняет ajax вызов к "AddOrEditCriteria", этот ActionResult, находит критерии и отображает форму PartialView обратно в div "#AddOrEditCriteriaFormContainer". Пока все хорошо, это прекрасно работает во всех браузерах.

Но когда я нажимаю второй раз на эту форму редактирования, вместо того, чтобы сделать вызов ajax, IE просто отображает PartialView из того, что у него было в кэше, в то время как все другие браузеры правильно извлекают данные снова (что и требуется, так как это представление позволяет редактировать критерии, они могли быть отредактированы кем-то другим за это время).

Самое странное, что IE делает вызов, но каким-то образом он никогда не достигает сервера, он просто использует кэш, используя Result 304. Это видно из этого снимка сети:

URL Method  Result  Type    Received    Taken   Initiator   Wait??  Start?? Request??   Response??  Cache read??    Gap??
/PerformanceMVC/Management/AddOrEditCriteria?competencySectionId=178&criteriaId=369&X-Requested-With=XMLHttpRequest GET 304 text/html   182 B   < 1 ms  JS Library XMLHttpRequest
/PerformanceMVC/Management/AddOrEditCriteria?competencySectionId=178&criteriaId=369&X-Requested-With=XMLHttpRequest GET 304 text/html   182 B   < 1 ms  JS Library XMLHttpRequest
/PerformanceMVC/Management/AddOrEditCriteria?competencySectionId=178&criteriaId=369&X-Requested-With=XMLHttpRequest GET 200 text/html   1.53 KB 1.24 s  JS Library XMLHttpRequest

Последний снимок - первый, первые два были сделаны после и получают результат 304.

Я нашел способ исправить это, добавив параметр "breakcache" к вызову ajax со случайным числом, но это не кажется хорошим решением.

Эта проблема портит жизнь нашим пользователям, потому что они видят данные, которые не должны обновляться из-за IE.

5
задан Craig Stuntz 13 January 2012 в 18:35
поделиться