Je voulais définir une classe CSS dans ma page maître, qui dépend du contrôleur et de l'action actuels. Je peux accéder au contrôleur actuel via ViewContext.Controller.GetType().Name
, mais comment puis-je obtenir l'action en cours (par exemple Index
, Show
etc.)?
c#
asp.net-mvc
buggs
la source
la source
Dans le RC, vous pouvez également extraire des données d'itinéraire comme le nom de la méthode d'action comme ceci
Mise à jour pour MVC 3
Mise à jour pour MVC 4
Mise à jour pour MVC 4.5
la source
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
+ variationsPour obtenir l'ID actuel sur une vue:
Pour obtenir le contrôleur actuel:
la source
ViewContext.RouteData.Values.ContainsKey(<key>)
premier.Je sais que c'est une question plus ancienne, mais je l'ai vue et j'ai pensé que vous pourriez être intéressé par une version alternative que de laisser votre vue gérer la récupération des données dont elle a besoin pour faire son travail.
Un moyen plus simple à mon avis serait de remplacer la méthode OnActionExecuting . Vous passez le ActionExecutingContext qui contient le membre ActionDescriptor que vous pouvez utiliser pour obtenir les informations que vous recherchez, qui est le ActionName et vous pouvez également atteindre le ControllerDescriptor et il contient le ControllerName.
J'espère que cela t'aides. Si quoi que ce soit, au moins cela montrera une alternative pour toute autre personne qui vient par votre question.
la source
J'ai vu différentes réponses et j'ai trouvé un assistant de classe:
Donc, dans View (ou master / layout), vous pouvez l'utiliser comme ça (syntaxe Razor):
J'espère que ça aide.
la source
Vous pouvez obtenir ces données de RouteData d'un ViewContext
la source
Dans MVC, vous devez fournir à la vue toutes les données, ne pas laisser la vue collecter ses propres données, vous pouvez donc définir la classe CSS dans l'action de votre contrôleur.
et sélectionnez cette valeur de vos ViewData dans votre vue
la source
Je vote pour ce 2:
et
Vous pouvez récupérer le nom physique de la vue actuelle et l'action qui l'a déclenchée. Il peut être utile dans les pages partielles * .acmx pour déterminer le conteneur hôte.
la source
J'utilise ASP.NET MVC 4, et c'est ce qui a fonctionné pour moi:
la source
Prolonger la réponse de Dale Ragan , son exemple de réutilisation, créez une classe ApplicationController qui dérive de Controller, et à votre tour, tous vos autres contrôleurs dérivent de cette classe ApplicationController plutôt que Controller.
Exemple:
Sur votre nouveau ApplicationController, créez une propriété nommée ExecutingAction avec cette signature:
Et puis dans la méthode OnActionExecuting (d'après la réponse de Dale Ragan), affectez simplement l'ActionDescriptor à cette propriété et vous pouvez y accéder chaque fois que vous en avez besoin dans l'un de vos contrôleurs.
la source
Remplacez cette fonction dans votre contrôleur
la source