Кеширование пончиков _Layout с помощью mvcdonutcaching ASP.NET MVC
В моем проекте ASP.NET MVC у меня есть подменю входа в меню навигации моего общего _Layout.cshtml
файл, отображающий информацию о пользователе, если пользователь вошел в систему, или параметры регистрации / входа, если нет. Подменю входа в систему является частичным представлением в моей общей папке с именем _LoginPartial
:
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
//display <ul> with user profile settings, omitted for brevity
}
else
{
//display <ul> to signup/login, omitted for brevity
}
Хотя я интенсивно кэширую несколько действий различных контроллеров, я хочу реализовать _Layout
чтобы _LoginPartial
не кэшируется по понятным причинам. Я использую библиотеку mvcdonutcaching для достижения этой цели (предложено в этом ответе), которая обеспечивает некоторые перегрузки @Html.Action
которые имеют дополнительный bool excludeFromParentCache
имущество.
Таким образом, я создал LayoutController
с UserAuth
действие, которое возвращает _LoginPartial
:
public class LayoutController : Controller
{
[ChildActionOnly]
public ActionResult UserAuth()
{
return PartialView("_LoginPartial");
}
}
..И по моему _Layout
файл, где я хочу _LoginPartial
чтобы появиться, я называю mvcdonutcaching Html.Action
перегрузка как таковая:
@Html.Action("UserAuth", "Layout", true)
Чтобы проверить это, я установил OutputCache
с большой продолжительностью на Index
действие моего FAQController
, но если я буду следовать этим шагам:
- авторизоваться
- перейти к /faq
- выйти
- перейти к /faq
/ Faq по-прежнему показывает мне, как вошел в систему.
Что мне здесь не хватает? Это вывод mvcdonutcaching в реальном HTML:
<!--Donut#3ED0C02DC8A537BA39C854B0D03E9A954F9FD01409A5E10C6C623D32512359E90086702A97EB36055229506A07D84CC1F6F7D1BF0A230DE5E87423363C24CA8D8C93D671FF398054DA29A7594CE2B8E939195C563004CE281D76DD838DB25198FCCCEC694F80885B86E611E2C5D9DE0C0B9B67432AD021FF581FD4A652C611D62B12C4C3A327E917940F333B56268D530831CCA617AF126AA0F809E5FBF1AB3C4231B11851F0BC73ED1A0B43A81AFF7B9FB081B7DF4B90712965596411627ECABD9DDFD519438910DBFCB94A22C216B1C3ABDBB5FC5E436E838505E6B56698E37CDF09A47CEAB5A3E3269FA326EA9191142954445BC92CE50248A0F7B964764C6E6768A92C31E55AE07AF230ECB7B8E8A5B048A82CD035095D84BDDA6336ED7805BB89CAB8C92AF1E4FA7971DF92CC2C2BC68CF605B594191DD55BDAF4E90D6451EF10FA18140B4201D16071052D5CC2B9490BFA00B2DDC622ED22CA1F8DB75E5F30E830B9D7B13778BC6E63EC49745AC037A4009A4CF05749568BD4D3DB8AE4A1E08024#-->
<ul class="nav navbar-nav navbar-right">
<ul class="dropdown-menu" role="menu">
<li><a href="/manage" class="dropdown" title="Manage your account"><i class="fa fa-user fa-lg"></i> Account</a></li>
<li class="divider"></li>
<li><a href="javascript:document.getElementById('logoutForm').submit()" title="Log out"><i class="fa fa-sign-out fa-lg"></i> Log out</a></li>
</ul>
</ul>
<!--EndDonut-->
Обновление: я также попытался переместить меню в _LoginPartial
к частичному взгляду, проживающему во взглядах LayoutController
вместо этого - проблема сохраняется.
2 ответа
Я столкнулся с тем же самым, но решил, заметив, что я случайно использовал [OutputCache]
вместо [DonutOutputCache]
!
Ошибка пользователя Работает в _Layout
красиво. Пожалуйста, проверьте, что вы используете [DonutOutputCache]
приписывать.
Переместите свое действие в Account
или же Member
Контроллер избегать использования LayoutController
,
Вы должны проверить официальную демонстрацию: https://github.com/moonpyk/mvcdonutcaching/tree/master/DevTrends.MvcDonutCaching.Demo
Особенно AccountController
и взгляды...
С уважением...