2010-04-18 6 views
2

Je viens de mettre à jour mon site d'ASP.NET 3.5 à 4.0. J'ai travaillé à travers quelques changements de rupture et il y avait plus que ce à quoi je m'attendais. Je ne peux pas comprendre, cependant, c'est pourquoi mon contrôle <asp:Substitution /> a soudainement cessé de fonctionner comme il se doit. Il est supposé ignorer les paramètres de cache de sortie de la page parente et mettre à jour à chaque requête. Pour une raison quelconque, cela ne se produit pas. C'est la mise en cache pendant les 10 minutes complètes (le paramètre OutputCache pour ma page d'accueil). Des idées?Pourquoi mon ASP: Le contrôle de substitution ne fonctionne soudainement pas dans ASP.NET 4.0?

Répondre

2

< asp: La substitution > et les autres contrôles serveur ne sont pas pris en charge dans MVC. La substitution de réponse en particulier est intrinsèquement liée au pipeline WebForms. Le fait que cela a fonctionné dans MVC 1 était un accident heureux mais n'était pas intentionnel.

L'équipe MVC travaille sur les moyens d'activer le cache de substitution dans MVC 3 et au-delà, mais il y aura probablement des mécanismes MVC spécifiques pour ce faire, vous ne devriez pas attendre < asp: Remplacement > ou Response.WriteSubstitution () pour aller de l'avant. En attendant, la meilleure option est de mettre en cache toute la page, puis utilisez Javascript/AJAX pour que le client remplisse les parties à mettre à jour.

+0

Merci Levi. J'ai trouvé une autre solution de contournement. J'ai changé de stratégie car il n'y a qu'une seule section de la page qui bénéficie de la mise en cache. Comme il s'avère, on peut utiliser la directive OutputCache sur une vue partielle si vous l'ajoutez à votre page comme s'il s'agissait d'un contrôle Web Forms ... http://www.highoncoding.com/Articles/638_Understanding_Partial_Views_in_ASP_NET_MVC_Application.aspx –

+0

I évitez d'utiliser <% @ OutputCache%> sur un fichier .ascx, car il s'agit également d'un hack vilain dont le fonctionnement n'est pas garanti (tout comme la mise en cache de substitution est interrompue). Si vous devez mettre en cache seulement une partie de la page, pensez à utiliser l'attribut [ChildActionCache] de MVC Futures for ASP.NET 4 (http://aspnet.codeplex.com/releases/view/41742). Cet attribut peut être appliqué à une méthode qui est la cible d'un Html.RenderAction(), et seulement le contenu de ce RenderAction() sera mis en cache pendant la période spécifiée. – Levi

Questions connexes