我有一个在 Chrome 和 FF 中运行良好的工具。但是对于任何版本的 IE,浏览器都会显示缓存信息,而不是通过 Ajax 拉取来检索数据。
这是我的设置:
我有我循环的标准:
@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 执行此操作,并且问题也发生了,因此您可以忽略它。我还尝试通过一个普通<img>
的 jQuery 触发器来更改整个 ImageActionLink,没有区别。
发生的情况是,当用户单击“编辑”链接时,它将对“AddOrEditCriteria”进行 ajax 调用,该 ActionResult 找到条件,并将 PartialView 表单显示回 div“#AddOrEditCriteriaFormContainer”。到目前为止一切顺利,这在所有浏览器中都可以正常工作。
但是,当我第二次单击该编辑时,IE 不执行 ajax 调用,而是简单地显示缓存中的 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 回报。
我找到了一种方法来修复它,方法是向带有随机数的 ajax 调用添加“breakcache”参数,但这似乎不是一个好的解决方案。
这个问题一直困扰着我们的用户,因为他们看到了不应该因为 IE 而更新的数据。