JQuery获取对MVC4部分视图的请求,不调用服务器,而是使用本地缓存

JQuery获取对MVC4部分视图的请求,不调用服务器,而是使用本地缓存,jquery,asp.net-mvc,cache-control,Jquery,Asp.net Mvc,Cache Control,我有一个部分视图的MVC4控制器。当用户请求刷新时,使用JQuery回调调用此视图。当页面最初加载并进行第一次回调时,一切正常,尽管后续刷新请求似乎从未命中服务器,而是从本地缓存中提取。MVC创建的第一个响应添加了响应头缓存控制:private,s-maxage=0。是否有一种方法可以改变这一点,从而不缓存对此视图的调用,并且在每个请求上都满足刷新请求 下面是视图的一个示例 public PartialViewResult HubStatistics(OverviewQuery query) {

我有一个部分视图的MVC4控制器。当用户请求刷新时,使用JQuery回调调用此视图。当页面最初加载并进行第一次回调时,一切正常,尽管后续刷新请求似乎从未命中服务器,而是从本地缓存中提取。MVC创建的第一个响应添加了响应头
缓存控制:private,s-maxage=0
。是否有一种方法可以改变这一点,从而不缓存对此视图的调用,并且在每个请求上都满足刷新请求

下面是视图的一个示例

public PartialViewResult HubStatistics(OverviewQuery query)
{
    var model = _portalDal.GetStatistics(query);

    return PartialView("_HubStatistics", model);
}
下面是请求刷新时调用的客户端脚本示例

function UpdateHubStatistics(id, start, end) {
    $.get("/hub/statistics?a=" + id + "&s=" + start + "&e=" + end, function (data) {
        $('.statistics').fadeOut(150, function () {
            $('.statistics').html(data);
            $('.statistics').fadeIn(200);
         });
    });
}

注意:如果任何一个输入值发生变化,那么一切都正常,只是当输入值相同时就不一样了。您可以尝试在查询字符串的末尾添加一个随机数,例如
&=.342342334
,这是jQuery在设置
缓存:false
时所做的


您还可以将
Cache Control:no Cache
添加到响应标头,以及
Pragma:no Cache
,但浏览器对这些标头的解释不同(它们通常尊重
Cache Control
标头)。

您可以尝试在查询字符串的末尾添加一个随机数,例如
&=.342342334
,这是jQuery在设置
缓存:false
时所做的操作


您还可以将
Cache Control:no Cache
添加到响应标题中,以及
Pragma:no Cache
,但浏览器对这些标题的解释不同(它们通常尊重
Cache Control
标题)。

在局部视图中添加
OutputCacheAttribute

[OutputCache(Duration = 0)]
public PartialViewResult HubStatistics(OverviewQuery query) { ... }

这将强制服务器、代理和客户端不缓存结果。

在局部视图中添加
OutputCacheAttribute

[OutputCache(Duration = 0)]
public PartialViewResult HubStatistics(OverviewQuery query) { ... }

这将强制服务器、代理和客户端不缓存结果。

浏览器并不总是尊重响应头。最好在客户机/服务器上实现解决方案。查看iOS缓存
post
请求的示例链接。这起作用了。。。这导致MVC将头设置为thi
Cache-Control:public,max-age=0,s-maxage=0
浏览器并不总是尊重响应头。最好在客户机/服务器上实现解决方案。查看iOS缓存
post
请求的示例链接。这起作用了。。。这导致MVC将头设置为thi
Cache-Control:public,max-age=0,s-maxage=0