OutputCache阻止我的用户名显示在标头中
本文关键字:显示 我的 用户 OutputCache | 更新日期: 2023-09-27 18:01:01
在我的网站上,我在_Layout.cshtml中定义了一个标题
<li class="dropdown">
@if (Request.IsAuthenticated)
{
<a href="#" class="dropdown-toggle menuItem" data-toggle="dropdown" style="color: red;">@User.Identity.Name <b class="caret"></b></a>
}
else
{
<a href="#" class="dropdown-toggle menuItem" data-toggle="dropdown">Profile <b class="caret"></b></a>
}
<ul class="dropdown-menu">
@if (!Request.IsAuthenticated)
{
<li><a href="/Account/Register">Register</a></li>
<li><a href="/Account/Login">Login</a></li>
<li><a href="/Account/ForgotPassword">Forgot Password</a></li>
}
else
{
<li><a href="/Account/ChangePassword">Change Password</a></li>
<li><a href="/Account/EditProfile">Edit Profile</a></li>
<li><a href="/Account/Logout">Logout</a></li>
}
</ul>
</li>
因此,我希望动态显示我的菜单项名称,以及基于用户是否登录的内容。
我的所有控制器中99%的方法都实现了[OutputCache]属性。正因为如此,在我登录网站后,菜单项仍然显示"配置文件",以及与配置文件(又名注册、忘记密码等(对应的菜单项。
我必须关闭网站中的缓存才能在登录后立即显示用户名吗?这在我的开发环境中非常有效,因为我在缓存属性周围使用#IFDEBUG语句。。。
例如,这是我的家庭控制器:
#if !DEBUG
[OutputCache(Duration = 86400)]
#endif
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
我使用了甜甜圈缓存库(spender在上面的评论中提到(来解决一个非常类似的问题。
一旦您的项目引用了MvcDonutCaching库,您就可以调用扩展的Html.Action
方法将其从缓存中排除,例如
// Action(this HtmlHelper htmlHelper, string actionName, string controllerName, bool excludeFromParentCache)
@Html.Action("LoginStatus", "Home", true)
要做到这一点,显然需要将不想缓存的部分隔离到其自己的操作和局部视图中。