2010-07-29 18 views
8

Maintenant que MVC 3 Preview 1 ici, nous pouvons utiliser le moteur de vue Razor (.cshtml). Si une vue ne se trouve pas, je reçois cette erreur:Serait-il utile de supprimer la recherche .aspx/.ascx si je ne prévois pas de les utiliser?

The view 'a' or its master was not found. The following locations were searched: 
~/Views/Home/a.aspx 
~/Views/Home/a.ascx 
~/Views/Shared/a.aspx 
~/Views/Shared/a.ascx 
~/Views/Home/a.cshtml 
~/Views/Shared/a.cshtml 

Serait-il la peine d'enlever la .aspx/.ascx recherche, si je ne prévois pas de les utiliser?

+0

Dans un [MVC4 Jump vidéo Start] (http://channel9.msdn.com/Series/Building-Web-Apps-with-ASP-NET-Jump -Start/Building-Web-Apps-avec ASPNET-Jump-Start-02-Build-and-Deploying-Websites-with-ASPNET-MVC-4), Scott Hanselman dit que vous pourriez réaliser une minuscule amélioration des performances en faisant cela. – DOK

Répondre

17

Je doute que vous obteniez un gain de performance notable de cela. C'est simplement une vérification de fichier et si elle est également mise en cache par le moteur, il n'y a pratiquement aucune amélioration des performances. Je l'appellerais micro-optimisation!

Je suppose que si vous savez que vous ne serez pas utiliser WebForms, vous pouvez simplement le retirer de la liste des moteurs de vue, comme ceci:

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new RazorViewEngine()); 

De cette façon, il ne sera pas vérifier ASPX/ascx des dossiers.

+2

Je recommanderais la première option, puisque nous (équipe MVC) ne sommes actuellement pas en train de passer à un ordre particulier de moteurs de vue dans cette collection. – marcind

+0

@marcin: Il est probablement préférable de trouver les View Engine que vous ne voulez pas et de les supprimer manuellement en localisant leur index et en les supprimant. Ainsi, si MVC ajoute des moteurs de vue supplémentaires (ou si d'autres composants enregistrent leurs propres moteurs de vue), vous ne les supprimerez pas. – Eilon

+0

Vrai, j'ai pensé à ça aussi, mais comme il voulait seulement utiliser Cshtml je ne l'ai pas ajouté. Pourrait ressembler à quelque chose comme ceci: 'ViewEngines.Engines.Remove (ViewEngines.Engines.OfType (). First());' Drôle combien de façons différentes vous pouvez écrire cela! – aolde

4

Le code a été révisé:

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new RazorViewEngine());