MVC 3防止部分视图缓存

时间:2012-01-05 19:01:22

标签: asp.net-mvc-3

我正在使用带有剃须刀的MVC 3。我有一些从主视图调用的部分视图。在部分视图中,我想显示一些DB值。当我更改数据库值时,它会显示缓存中的旧值。那我怎么能在部分视图上停止缓存呢?

 @Html.Partial("_myPartialView", Model)

THX

4 个答案:

答案 0 :(得分:2)

您的代码可能会缓存一切(默认情况下可能是浏览器缓存),因此您真的需要正在处理的圆环缓存。 查看: http://www.devtrends.co.uk/blog/donut-output-caching-in-asp.net-mvc-3

答案 1 :(得分:1)

 $(function () {
 $.ajaxSetup ({
      // Disable caching of AJAX responses
      cache: false }); 
)};

应该这样做!

答案 2 :(得分:0)

上面的代码不使用缓存作为默认值。如果你使用

@Html.Partial("_myPartialView", Model)

它使用Model对象中的数据呈现_myPartialView,没有任何缓存。你的问题必须由别的东西引起。也许构建Model对象的数据检索代码使用了一些数据层缓存?发布更多代码会有所帮助。

答案 3 :(得分:0)

根据设置的不同,在部分视图上禁用缓存的一种可能方法是将其作为单独的客户端调用(即jQuery / Ajax)进行分解。

否则主题的这种变化怎么样。

在回到MVC之后花了一点时间才想出这个。只需将缓存设置直接放在部分标题视图中即可。与显示用户名时一样。无需全局或服务器端代码。

唯一的问题是页面缓存后,登录后不会立即刷新。但是,我们会在初次浏览产品时保持速度。在我们的案例中,我们可以权衡

@if ( Request.IsAuthenticated)
{
        @* when we are authenticated, don't cache any more! *@
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
HttpContext.Current.Response.Cache.SetNoServerCaching();
        @*@Html.Raw(DateTime.Now.ToString())*@
@Html.ActionLink("Welcome " + ( String.IsNullOrEmpty(((System.Security.Claims.ClaimsIdentity)User.Identity).FindFirstValue("UserName")) ? User.Identity.Name : ((System.Security.Claims.ClaimsIdentity)User.Identity).FindFirstValue("UserName")), "Index", "Manage", routeValues: new { Area = "Store" }, htmlAttributes: new { title = "Manage"})
}
else
{
}