Cache di Asp.net MVC 2

Attualmente sto sviluppando un sito web usando asp.net mvc 2 in c #. Non ho mai utilizzato la funzione di memorizzazione nella cache in MVC e vorrei applicarlo alla pagina del profilo utente. Il contenuto di questa pagina cambia raramente e l’unica parte che deve essere in tempo reale è l’elenco dei post recenti dell’utente. (Io uso linq-to-sql per caricare i dati dal database)

Ho bisogno di alcuni suggerimenti su quale tecnica di caching dovrei usare e come implementarla?

Aggiornamento: la soluzione di Xandy di seguito funziona quasi, tranne che non posso passare i dati. Come potrei riscrivere questo usando il? Html.RenderPartial (“UserPosts”, ViewData [“UserPosts”])

I trucchi della cache dei frammenti di Phil Hack non funzionano più su MVC2.

A StackOverflow costruiamo frammenti html come testo e li memorizziamo usando HttpRuntime.Cache e altro.

Come altre risposte hanno affermato, la caching di ciambella “sorta di” funziona in MVC.

Non lo consiglierei – invece offrirò un’alterante:

Hai una vista per il profilo degli utenti, chiamiamola ” UserProfile.aspx “.

Ora in questa vista, hai un sacco di HTML, tra cui una sezione per “post recenti”.

Ora, presumo che questo è qualcosa come gli ultimi 10 post per l’utente .

Quello che vorrei fare è mettere questo HTML / sezione in una vista parziale e servirlo tramite un metodo di azione separato, noto anche come PartialViewResult:

 public class UserProfileController { [HttpGet] [OutputCache (Duration=60)] public ActionResult Index() // core user details { var userProfileModel = somewhere.GetSomething(); return View(userProfileModel); } [HttpGet] public PartialViewResult DisplayRecentPosts(User user) { var recentPosts = somewhere.GetRecentPosts(user); return PartialViewResult(recentPosts); } } 

Renderizza la vista parziale usando jQuery:

  

In questo modo, è ansible eseguire il maxout di OutputCache per i dettagli principali (Index ()), ma i post recenti non vengono memorizzati nella cache. (oppure puoi avere un periodo di cache molto piccolo).

Il metodo jQuery di rendering del partial è diverso da RenderPartial , in questo modo stai servendo l’HTML direttamente dal controller, così puoi controllare la cache di output di conseguenza.

Il risultato finale è molto simile alla cache ciambella (parti della pagina memorizzate nella cache, altre no).

ASP.Net ha un tutorial sulla cache di output per MVC .

Caching parziale (aka ciambella) che funzionerebbe per MVC2.