tl; dr:Menu da MvcSiteMapProvider a volte non riesce a rendere se stesso dopo una richiesta torna in linea, anche se le piste di codice e il menu rende dopo un refresh della pagina.MvcSiteMapProvider non è pronto per il rendering di pagine, problema di cache?
Sto usando il MvcSiteMapProvider in un progetto ASP.NET MVC 3, e, occasionalmente, dopo il passaggio l'applicazione da offline a online (con l'inserimento di un un file App_Offline.htm
nella root del server e la rimozione) del menu non renderà nulla fino a quando la pagina non viene aggiornata.
Sto utilizzando un DynamicNodeProvider personalizzato per interrogare le voci di menu da un database e quindi eseguire il rendering del menu. Durante il debug, posso vedere che questo codice è effettivamente in esecuzione prima che la pagina venga caricata, ma nessun menu viene visualizzato sulla pagina. Ho impostato la cache su diverse ore e sto utilizzando una chiave cache personalizzata per consentire l'invalidazione dopo determinate azioni.
Purtroppo non riesco a riprodurre questo errore in modo coerente. I può può comunque riprodurre più frequentemente se aggiungo un sonno nella parte superiore del DynamicNodeProvider - non riuscirà circa il 60-70% del tempo con un ritardo di 30+ secondi. La mia ipotesi migliore è che abbia a che fare con il meccanismo di memorizzazione nella cache perché impostare la durata della cache su 0 sembra in modo che non ci siano problemi e il menu si apre sempre. Tuttavia, è difficile dirlo con certezza, poiché il problema è difficile da definire. Lasciandolo a 0 non sarebbe una soluzione accettabile a causa della resistenza alle prestazioni.
Quale potrebbe essere la causa principale di questo problema? Qualcuno ha visto questo comportamento prima o ha una soluzione alternativa?
Non vedo l'ora di riscriverlo! – Joshua
Sto pianificando di iniziarlo all'inizio del 2013. E per ora, sto bestemmiando che non ho preso il percorso di "fuggi la biblioteca sottostante". – maartenba
è legato al problema che a volte il menu rende i nodi sbagliati? – 360Airwalk