Comment puis-je hériter d'une ASP.NET MVC contrôleur et de changer seulement le point de vue?
J'ai un contrôleur hérite d'un contrôleur de base, et je me demande comment je peux utiliser toute la logique du contrôleur de base, mais le retour d'un point de vue différent que le contrôleur de base utilise.
Le contrôleur de base remplit un modèle objet et le passe du modèle de l'objet à son point de vue, mais je ne suis pas sûr de savoir comment je peut accéder au modèle d'objet dans le contrôleur enfant afin que je puisse les transmettre à l'enfant du contrôleur de vue.
- Avez-Vous essayez juste d'hériter de contrôleur de base et de préparer les points de vue?
Vous devez vous connecter pour publier un commentaire.
Un couple de points. Vous pouvez saisir votre valeur de retour comme ViewResult si vous savez que vous allez revenir. Ensuite, vous pouvez interroger la valeur de l'implémentation substituée. Plus important encore, selon l'architecture MVC v1 source, l'appel de la Vue(objet) définit simplement la ViewData.Modèle sur la manette, puis construit un ViewResult.
Contrôleur.cs:440
Contrôleur.cs:456
Donc, tout ce que vous devez faire est d'appeler la méthode de base et en Vue de l'appel(chaîne de caractères).
Bien sûr, vous gaspillez de cycles CPU de la construction de la ViewResult que vous ignorez. Ainsi, au lieu, vous pouvez le faire:
Si votre contrôleur de base renvoie ActionResult, vous aurez à le jeter aux ViewResult avant de changer le ViewName.
Exemple de partir de mon application:
De la classe de Base:
Hérité:
SeverityController.Index() conduit à des Vues/Gravité/Index.aspx. Juste eu à le préparer en vue. La gravité est l'un des dictionared dans mon bug application de suivi. Chaque dictionnaire a la même logique, afin que je puisse partager un peu de code.
D'après les réactions sur ce fil, j'ai mis en place une solution comme celle proposée par Antoine Koch.
Au lieu d'utiliser une méthode abstraite, j'ai utilisé un béton, virtuel GetIndex méthode pour que je puisse mettre de la logique dans la base de contrôleur.
}
Suffit d'utiliser l'abstraction pour appeler les éléments dont vous avez besoin à partir de la sous-classes.
J'ai fini juste de mettre un paramètre supplémentaire sur le Contrôleur de base -- viewName.
Semble très bien fonctionner.
Ai-je raté une inconvénients majeurs?