Diego, System.Web.Mvc.WebViewPage
est le bon type de base (et vous devriez avoir une autre classe héritant de System.Web.Mvc.WebViewPage<TModel>
si vous voulez des vues fortement typées). Vous devez marquer votre propre classe comme abstract
afin que vous ne soyez pas obligé d'implémenter la méthode Execute.
Mise à jour: Pour configurer toutes vos vues afin d'utiliser votre classe de base personnalisée, consultez le fichier ~\Views\Web.config
. A l'intérieur, il y a une section spécifique à Razor où vous pouvez utiliser l'attribut pageBaseType
pour configurer votre type personnalisé.
En ce qui concerne la propriété Context, elle doit être entièrement initialisée une fois que la vue est en cours d'exécution. Cependant, il pourrait ne pas être disponible si vous essayez d'y accéder trop tôt (par exemple, depuis le constructeur de votre classe). Quand essayez-vous d'y accéder? La méthode Execute est quelque chose qui est fourni par le compilateur Razor lorsque votre vue est compilée. Par exemple, étant donné le fichier de vue suivant
Hello @Name!
Le compilateur rasoir dans les coulisses génèrent la classe suivante (ce qui est une simplification, donc les détails peut-être loin, mais il doit transmettre le point)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
public void Execute() {
Write("Hello ");
Write(Name);
Write("!");
}
}
Ensuite, l'infrastructure appelle la méthode Execute sur votre classe d'affichage et votre vue est exécutée.
Pourriez-vous ajouter des comportements à toutes vos classes via des méthodes d'extension, ou en avez-vous besoin pour être des méthodes d'instance? – R0MANARMY
Principalement, j'ai besoin d'ajouter quelques variables qui peuvent être référencées à partir des vues. Je sais que je pourrais y parvenir en utilisant des méthodes d'extension, mais il devrait y avoir un moyen d'avoir des classes de pages d'affichage personnalisées comme avec le moteur de vue aspx. – Diego