2011-03-04 13 views
7

¿Alguien puede decirme si es posible guardar en caché un RenderPartial en varias páginas? Tengo un RenderPartial para un perfil de usuario que realmente no debería cambiar a menos que el usuario actualice su perfil. Así que realmente no quiero volver y obtener su perfil cada vez que cargue una página. Preferiría pasar el parcial hasta que me obliguen a actualizar (es decir, actualización de perfil)Caché MVC3 RenderPartial en varias páginas

Miré el ejemplo DonutHole que p.haack reunió, pero parece ser relevante para una sola página. ¿Puede alguien señalarme en la dirección correcta u ofrecer algún consejo? ¿O solo puedo almacenar en caché una página a la vez? ¡Gracias!

Respuesta

11

En su lugar, podría usar RenderAction. Ejemplo:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult About() 
    { 
     return View(); 
    } 

    [OutputCache(Duration = 6000, VaryByParam = "none")] 
    public ActionResult Cached() 
    { 
     // You could return whatever you want here, even a view 
     // but for the purpose of the demonstration I am simply 
     // returning a dynamic string value 
     return Content(DateTime.Now.ToLongTimeString(), "text/html"); 
    } 
} 

y en el interior de las vistas Index.cshtml y About.cshtml que podría incluir la acción del niño:

<div> 
    @{Html.RenderAction("Cached");} 
</div> 

y se obtendrá la versión en caché de la misma en las dos páginas.

+0

Gracias Darin. Eso fue perfecto. en lugar de regresar Contenido, realicé return PartialView (object); como notaste en tus notas. –

+0

Darin, ¿conoce alguna forma de hacer que OutputCache use un perfil de caché cuando se usa con una vista parcial? –

+1

@Mark Bueno, no, esto no es compatible. Puede echar un vistazo al siguiente artículo que explica el problema: http://www.dotnetcurry.com/ShowArticle.aspx?ID=665. Puede escribir un filtro de acción personalizado para solucionarlo. –

Cuestiones relacionadas