2010-08-19 5 views
0

J'ai implémenté mon propre VirtualPathProvider pour charger les vues 'intégrées'.ASP.NET MVC, Personnalisé VirtualPathProvider et IIS6

Cela fonctionne très bien lors de l'exécution à partir de Visual Studio, mais je reçois le message «La vue non trouvée» lors de l'exécution sur IIS6.

Y at-il quelque chose qui manque dans web.config, ou pourrait-il y avoir un autre problème?

J'ai ajouté un enregistrement et il semble que même si j'enregistre le Custom VirtualPathProvider dans Application_Start, le System.Web.Hosting.MapPathBasedVirtualPathProvider est toujours utilisé.

Répondre

0

Le vôtre n'est-il pas utilisé du tout? VirtualPathProviders fonctionne dans une pile, donc dans votre VirtualPathProvider, vous devriez remarquer que le membre de la classe de base "Previous" est en fait l'instance de "MapPathBasedVirtualPathProvider".

Si vous:

  1. Joindre votre débogueur IIS

  2. Faire un changement dans votre web.config, puis changer, puis de l'enregistrer (pour déclencher un recyclage) - tout en joint !

  3. Placez un point d'arrêt dans votre VPP dans FileExists

  4. Hit une page

Votre VPP se faire frapper? Si c'est le cas, la mise en cache de MVCs ViewEngine empêchera votre VPP de recevoir des requêtes supplémentaires après la première requête ...

+0

Je ne l'ai pas encore essayé. Mais, j'ai créé un moteur de vue personnalisé, où je connecte son VPP (this.VirtualPathProvider) dans la méthode FindView(). Mon VPP personnalisé n'apparaît jamais dans les journaux, et je crois que les vues mises en cache et non mises en cache passent par cette méthode. – Bertvan

+0

Si votre VPP n'apparaît même pas dans ViewEngine, êtes-vous sûr à 100% que la méthode Application_Start est appelée pour enregistrer le VPP? L'enregistrement est-il la toute première ligne dans Application_Start? Sinon, essayez de le placer ainsi. Il y a un nombre très limité d'endroits où un enregistrement VPP peut réellement prendre effet. – Jeff

Questions connexes