gpt4 book ai didi

c# - Internet Explorer 通过 Ajax Pull 显示缓存数据,结果为 304

转载 作者:太空狗 更新时间:2023-10-29 22:23:54 26 4
gpt4 key购买 nike

我有一个工具可以在 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> 更改整个 ImageActionLink与 jQuery 触发器没有区别。

发生的情况是,当用户单击“编辑”链接时,它将对“AddOrEditCriteria”执行 ajax 调用,ActionResult 会找到条件,并将 PartialView 表单显示回 div“#AddOrEditCriteriaFormContainer”。到目前为止一切顺利,这在所有浏览器中都能正常工作。

但是,当我第二次单击该编辑时,IE 没有执行 ajax 调用,而是简单地显示了它在缓存中的 PartialView,当所有其他浏览器再次正确提取数据时(这是必需的,因为 View 允许编辑条件,它可能已被其他人同时编辑过)。

奇怪的是 IE 正在调用,但不知何故它永远不会到达服务器,它只是通过使用结果 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。

最佳答案

IE 将缓存 AJAX GET,除非您告诉它不要这样做。

你告诉它不要通过 Cache-Control header .

所以这是我们所做的:

[CacheControl(HttpCacheability.NoCache), HttpGet]
public ActionResult MyAction() { return Json("Hi!", JsonRequestBehavior.AllowGet); }

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public sealed class CacheControlAttribute : ActionFilterAttribute
{
public CacheControlAttribute(HttpCacheability cacheability)
{
this._cacheability = cacheability;
}

public HttpCacheability Cacheability { get { return this._cacheability; } }

private HttpCacheability _cacheability;

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;
cache.SetCacheability(_cacheability);
}
}

关于c# - Internet Explorer 通过 Ajax Pull 显示缓存数据,结果为 304,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8855337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com