Lan*_*usT 5 c# internet-explorer http-status-code-304 asp.net-mvc-3
我有一个在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>
}
Run Code Online (Sandbox Code Playgroud)
ImageActionLink只是一个帮助器,可以创建一个内部带有图像的ActionLink,我尝试使用普通的ActionLink进行此操作,同时也会出现问题,因此您可以忽略它.我也尝试用一个<img>
带有jQuery触发器的plain来改变整个ImageActionLink ,没有任何区别.
当用户点击编辑链接时,它会对"AddOrEditCriteria"执行ajax调用,ActionResult会找到条件,并将PartialView表单显示回div"#AddOrEditCriteriaFormContainer".到目前为止一切顺利,这在所有浏览器中都能正常运行
但是,当我第二次点击该编辑时,不是进行ajax调用,IE只是显示PartialView,而不是它在缓存中的内容,当所有其他浏览器再次正确地提取数据时(这是必需的,因为该视图允许编辑标准,它可能已被其他人同时编辑).
奇怪的部分是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
Run Code Online (Sandbox Code Playgroud)
最后一个是第一个发生,前两个完成后,并获得304返回.
我找到了一种方法来修复它,通过随机数向ajax调用添加"breakcache"参数,但这似乎不是一个好的解决方案.
这个问题一直困扰着我们的用户,因为他们看到因IE而不应该全部更新的数据.
Cra*_*ntz 11
IE会缓存AJAX,GET
除非你告诉它不要.
你告诉它不要通过Cache-Control
标题.
所以我们这样做:
[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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2801 次 |
最近记录: |