c# asp.net-mvc caching asp.net-mvc-5 donut-caching

c# - Caché de donut_Disposición con mvcdonutcaching ASP.NET MVC



asp.net-mvc asp.net-mvc-5 (2)

Me encontré con exactamente lo mismo pero lo resolví después de notar que inadvertidamente había usado [OutputCache] lugar de [DonutOutputCache] !

Error de usuario. Funciona en _Layout hermosamente. Verifique que esté usando el atributo apropiado [DonutOutputCache] .

En mi proyecto ASP.NET MVC, tengo un submenú de inicio de sesión en el menú de navegación de mi archivo _Layout.cshtml compartido, que muestra la información del usuario si el usuario está conectado, o las opciones de inicio de sesión / inicio de sesión si no es así. El submenú de inicio de sesión es una vista parcial en mi carpeta compartida llamada _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 }

Mientras _Layout en memoria caché varias acciones de varios controladores, quiero implementar el caché de donuts en _Layout para que _LoginPartial no se _LoginPartial caché, por razones obvias. Estoy usando la biblioteca mvcdonutcaching para lograr esto (sugerido en esta respuesta ) que proporciona algunas sobrecargas de @Html.Action que tienen una propiedad bool excludeFromParentCache adicional.

Como tal, creé un LayoutController con una acción de UserAuth que devuelve _LoginPartial :

public class LayoutController : Controller { [ChildActionOnly] public ActionResult UserAuth() { return PartialView("_LoginPartial"); } }

..Y en mi archivo _Layout , donde quiero que aparezca _LoginPartial , llamo a mvcdonutcaching Html.Action overload como tal:

@Html.Action("UserAuth", "Layout", true)

Para probar esto, he establecido un OutputCache larga duración en la acción Index de mi FAQController , pero si sigo estos pasos:

  • iniciar sesión
  • navegar a / faq
  • cerrar sesión
  • navegar a / faq

/ faq todavía me muestra como conectado.

¿Que me estoy perdiendo aqui? Este es el resultado de mvcdonutcaching en el HTML real:

<!--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-->

Actualización : también he intentado mover el menú en _LoginPartial a una vista parcial que reside en las vistas de LayoutController en LayoutController lugar: el problema persiste.