Comment puis-je accéder à une instance de contrôleur depuis la vue? Par exemple, j’ai un HomeController
qui renvoie ensuite ma vue Index
. Dans cette vue, je souhaite accéder à l’instance HomeController
qui a créé la vue. Comment je fais ça?
ViewContext.Controller, et vous devrez le lancer.
<% var homeController = ViewContext.Controller as HomeController; %>
Ceci est couvert avec quelques rides supplémentaires dans le post Asp.Net MVC: Comment puis-je obtenir une URL virtuelle pour le contrôleur / la vue en cours? .
EDIT : Ceci est pour append un peu de viande à la recommandation de Mark Seemann que vous gardiez la fonctionnalité hors de la vue autant que possible humainement. Si vous utilisez le contrôleur pour vous aider à déterminer le balisage de la page rendue, vous pouvez utiliser la Html.RenderAction(actionName, controllerName)
place. Cet appel déclenche l’action comme s’il s’agissait d’une requête distincte et inclut son affichage dans la page principale.
Cette approche consortingbuera à imposer la séparation des préoccupations, car la méthode d’action redirigée peut faire tout le travail en ce qui concerne les règles de présentation. Il devra retourner une vue partielle pour fonctionner correctement dans votre vue parente.
À mon avis, vous devriez envisager une conception où la vue n’a pas besoin de connaître le contrôleur. L’idée est que le contrôleur s’occupe de la demande, crée un modèle et remet ce modèle à la vue. À ce stade, le travail du contrôleur est terminé.
Je pense que cela indique un défaut de conception si View a besoin de savoir quelque chose sur le Controller. Pouvez-vous nous en dire plus sur ce que vous essayez d’accomplir?
Je trouve souvent que lorsque vous avez affaire à des frameworks bien conçus (comme le framework MVC), si vous sentez que le framework se bat contre vous, vous allez probablement vous occuper de la tâche de manière incorrecte. Cela m’est arrivé beaucoup, et prendre du recul et me demander ce que j’essaie vraiment d’accomplir mène souvent à de nouvelles idées.