在AJAX请求后返回时显示旧数据
在使用asp.net core 1.0(mvc)编程商店时,我有以下场景:在AJAX请求后返回时显示旧数据,ajax,asp.net-core,Ajax,Asp.net Core,在使用asp.net core 1.0(mvc)编程商店时,我有以下场景: 我将3种产品添加到我的购物篮中 在购物篮上,我使用AJAX请求删除了3种产品中的一种。删除产品后,我将进入下一步,并重定向到带有“交货和付款”设置的页面 在带有交货和付款设置的页面上,我选择导航回购物篮。我希望看到2个产品,但我看到3个,因为页面还没有从服务器重新加载 当我检查fiddler时,我注意到没有执行对购物篮的各种资源的请求 在我的BaseController类中,我已经设置了以下应该禁用缓存的代码: [Non
[NonAction]
public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
context.HttpContext.Response.Headers.Add("Cache-Control", "no-store, must-revalidate");
context.HttpContext.Response.Headers.Add("Expires", "0");
context.HttpContext.Response.Headers.Add("Pragma", "no-cache");
await next();
}
有人知道我们如何返回并看到只包含两种产品的最新购物篮吗?您可以简单地使用以下代码:
<head data-page-key="@string.Concat(this.ViewContext.RouteData.Values["controller"], @"_", this.ViewContext.RouteData.Values["action"])"
data-page-token="@DateTime.Now.Ticks.ToString()">
<script type="text/javascript">
var pageKey = document.getElementsByTagName('head')[0].getAttribute("data-page-key");
var pageToken = document.getElementsByTagName('head')[0].getAttribute("data-page-token");
var pageTokenCached = sessionStorage[pageKey];
if (!pageTokenCached || pageTokenCached !== pageToken) sessionStorage.setItem(pageKey, pageToken);
else location.reload();
</script>
var pageKey=document.getElementsByTagName('head')[0].getAttribute(“数据页键”);
var pageToken=document.getElementsByTagName('head')[0].getAttribute(“数据页标记”);
var pageTokenCached=会话存储[pageKey];
如果(!pageTokenCached | | pageTokenCached!==pageToken)会话存储.setItem(pageKey,pageToken);
else location.reload();
浏览器的会话存储只存储一个会话的数据。当用户关闭特定浏览器选项卡时,数据将被删除
在这里,每次页面来自服务器时,都会生成一个新的数据页面标记值,存储在标记中,并保存在浏览器的会话存储中
当用户单击browser BACK按钮时,html页面将从浏览器缓存中检索并执行。因此,缓存的令牌是从sessionStorage中检索的,与我们在页面中的内容相比,即数据页面令牌
如果值相等,则表示该页来自浏览器缓存,否则它是来自服务器的页
当数据页令牌等于会话存储的令牌时,这意味着我们有一个过时的页面,因此它被重新加载,否则将被处理
会话存储与所有浏览器兼容,并且受IE 8.0支持。您只需使用以下代码即可:
<head data-page-key="@string.Concat(this.ViewContext.RouteData.Values["controller"], @"_", this.ViewContext.RouteData.Values["action"])"
data-page-token="@DateTime.Now.Ticks.ToString()">
<script type="text/javascript">
var pageKey = document.getElementsByTagName('head')[0].getAttribute("data-page-key");
var pageToken = document.getElementsByTagName('head')[0].getAttribute("data-page-token");
var pageTokenCached = sessionStorage[pageKey];
if (!pageTokenCached || pageTokenCached !== pageToken) sessionStorage.setItem(pageKey, pageToken);
else location.reload();
</script>
var pageKey=document.getElementsByTagName('head')[0].getAttribute(“数据页键”);
var pageToken=document.getElementsByTagName('head')[0].getAttribute(“数据页标记”);
var pageTokenCached=会话存储[pageKey];
如果(!pageTokenCached | | pageTokenCached!==pageToken)会话存储.setItem(pageKey,pageToken);
else location.reload();
浏览器的会话存储只存储一个会话的数据。当用户关闭特定浏览器选项卡时,数据将被删除
在这里,每次页面来自服务器时,都会生成一个新的数据页面标记值,存储在标记中,并保存在浏览器的会话存储中
当用户单击browser BACK按钮时,html页面将从浏览器缓存中检索并执行。因此,缓存的令牌是从sessionStorage中检索的,与我们在页面中的内容相比,即数据页面令牌
如果值相等,则表示该页来自浏览器缓存,否则它是来自服务器的页
当数据页令牌等于会话存储的令牌时,这意味着我们有一个过时的页面,因此它被重新加载,否则将被处理
会话存储与所有浏览器兼容,并且受IE 8.0支持。我建议您在删除时返回产品列表,并重新填充视图。“后退”按钮将重新加载上次页面上的内容。或者,如果您不担心紧缩,只要ajax请求成功,就可以手动删除删除的项目。我建议您在删除时返回产品列表,并重新填充视图。“后退”按钮将重新加载上次页面上的内容。或者,如果您不担心紧缩,只要ajax请求成功,就可以手动删除删除的项目。这是非常聪明的!这真是太聪明了!