0

我有一个带有部分视图的 MVC 4 控制器。当用户请求刷新时,使用 JQuery 回调调用此视图。当页面最初加载并进行第一个回调时,一切正常,尽管随后的刷新请求似乎从未到达服务器并从本地缓存中提取。MVC 创建的第一个响应添加了响应标头Cache-Control: 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);
         });
    });
}

注意:如果任何输入值发生变化,它都可以正常工作,只是在输入值相同时不会

4

2 回答 2

2

添加一个OutputCacheAttribute到您的局部视图:

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

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

于 2013-06-18T19:38:21.433 回答
1

您可以尝试在查询字符串的末尾附加一个随机数,例如&_=.342342334jQuery 在您设置cache: false.

您也可以添加Cache-Control:no-cache到您的响应标头,以及Pragma:no-cache,但是浏览器以不同的方式解释这些标头(Cache-Control尽管它们通常尊重标头)。

于 2013-06-18T19:33:06.740 回答