使用JQuery加载的MVC应用程序的奇怪“缓存问题”

时间:2012-06-12 07:48:13

标签: jquery asp.net-mvc

我有一个动作,它使用JQuery Load事件来调用控制器方法并检索数据,这很好用,我点击一个按钮,然后又回来了新内容。然而,在点击之后它停止获取数据。我在方法的顶部添加了一个断点,发现它被击中3次,然后没有被击中。这是我的jquery代码:

function callAction() {
    var url = '@Url.Action("Method", "Controller", new { type = "test" })';
    $("#divToLoadData").load(url);
}

正如我所说,这会加载数据,每次我点击一个链接来调用该函数,但在第三次检索后,它无法调用该方法并检索数据。我也试过使用$ .ajax,也有类似的结果。

有人遇到类似的事情吗?

1 个答案:

答案 0 :(得分:0)

由于jQuery.load()执行GET浏览器可能会缓存请求的结果并提供服务而不是命中服务器。您可以强制浏览器始终通过设置内容过期标头将请求发送到服务器。使用此属性装饰您的操作:

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        if (filterContext.IsChildAction)
            return;

        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}