Html 缓存不带导航栏的页面。用户登录/注销系统不支持';完全不更新(MVC)

Html 缓存不带导航栏的页面。用户登录/注销系统不支持';完全不更新(MVC),html,asp.net-mvc,caching,cache-control,outputcache,Html,Asp.net Mvc,Caching,Cache Control,Outputcache,我正在尝试缓存没有页面导航栏的页面。 当我缓存页面时,一切正常,但我得到了不想要的行为 说明: 例如,当我缓存索引页面时,导航栏也会被缓存,因此如果用户按下“登录”按钮并登录,用户将重定向到同一页面(索引),并且登录不会生效(用户名和“注销”按钮不会出现),则“登录”和“注册”按钮仍会显示,这是一个问题 这是我的代码: 主控台: public class HomeController : Controller { [OutputCache(Duration=(60*60))] p

我正在尝试缓存没有页面导航栏的页面。 当我缓存页面时,一切正常,但我得到了不想要的行为

说明:

例如,当我缓存索引页面时,导航栏也会被缓存,因此如果用户按下“登录”按钮并登录,用户将重定向到同一页面(索引),并且登录不会生效(用户名和“注销”按钮不会出现),则“登录”和“注册”按钮仍会显示,这是一个问题

这是我的代码:

主控台:

public class HomeController : Controller
{
    [OutputCache(Duration=(60*60))]
    public ActionResult Index()
    {
        return View();
    }
    // ...
}

我能做些改变来防止它吗

我使用“haim770”指南找到了解决方案

使用“甜甜圈缓存”的解决方案()

1.首先,我从NuGet软件包中获取“甜甜圈缓存”

2.我在_layout.cshtml页面中切换了一行:
@Html.Partial(“\u LoginPartial”)
@Html.Action(“partialView”,true)

3.然后,我在帐户控制器内部构建了一个名为“partialView”的操作,该操作返回我想要的视图,如下所示:

public ActionResult partialView()
    {
        return PartialView("_LoginPartial");
    }
4.之后,我装饰了返回索引页的操作

[DonutOutputCache(持续时间=(60*60))]

像这样:

  [DonutOutputCache(Duration=(60*60))]
    public ActionResult Index()
    {
        return View();
    }

感谢Haim(Chaim),您已经完成了。使用像@haim770这样的甜甜圈缓存解决方案谢谢您的帮助,但我不需要从我的视图中缓存部分视图,而不是html。操作,有什么解决方法吗?您必须以某种方式将导航栏从缓存过程中排除。您可以尝试的另一种方法是编写一些Javascript(在客户端)根据当前用户身份验证状态显示/隐藏相关部分。是的。您可以在我的第一个链接中看到一些示例。@haim770谢谢,我让它工作了。谢谢,但我看到性能远低于原始的输出缓存属性