Pour notre application Web, je dois enregistrer l'ordre des éléments récupérés et affichés en fonction de la vue - ou pour être précis - du contrôleur et de l'action qui ont généré la vue (et l'ID utilisateur bien sûr, mais ce n'est pas le point ici).
Au lieu de simplement donner un identifiant moi-même dans chaque action du contrôleur (afin de l'utiliser pour un tri des sorties DB en fonction de la vue), j'ai pensé qu'il serait plus sûr et plus facile de créer cet identifiant automatiquement à partir du contrôleur et de la méthode d'action qu'il obtient appelé de.
Comment puis-je obtenir le nom du contrôleur et l'action à partir de la méthode d'action dans un contrôleur? Ou ai-je besoin de réflexion pour cela? Je suppose que c'est assez facile, merci d'avance!
Route
attribut sur la méthode d'action que je rassemble? Est-il également possible de renommer les contrôleurs?Réponses:
la source
Voici quelques méthodes d'extension pour obtenir ces informations (elles incluent également l'ID):
Usage:
la source
Cela pourrait être utile. J'avais besoin de l'action dans le constructeur du contrôleur, et il apparaît à ce stade du cycle de vie MVC,
this
n'a pas été initialisé etControllerContext = null
. Au lieu de fouiller dans le cycle de vie MVC et de trouver le nom de fonction approprié à remplacer, je viens de trouver l'action dans le fichierRequestContext.RouteData
.Mais pour ce faire, comme pour toute
HttpContext
utilisation associée dans le constructeur, vous devez spécifier l'espace de noms complet, carthis.HttpContext
il n'a pas non plus été initialisé. Heureusement, il sembleSystem.Web.HttpContext.Current
statique.REMARQUE: ce n'est probablement pas le moyen le plus pris en charge pour accéder à toutes les propriétés de HttpContext, mais pour RequestContext et Session, il semble fonctionner correctement dans mon application.
la source
la source
la source
Voici ce que j'ai jusqu'à présent:
la source
Voici la réponse la plus simple et la plus pratique pour obtenir un nom:
Ou
Le code ci-dessus teste avec asp.net mvc 5.
la source
Ajoutez ceci à votre contrôleur de base dans la méthode GetDefaults ()
Implémentez vos contrôleurs dans Basecontroller
Ajoutez une vue partielle _Breadcrumb.cshtml et ajoutez-la dans toutes les pages requises avec @ Html.Partial ("_ Breadcrumb")
_Breadcrumb.cshtml
la source
filterContext
variable de l'intérieurGetDefaults()
?Vous pouvez obtenir le nom du contrôleur ou le nom de l'action à partir de l'action comme n'importe quelle variable. Ils sont juste spéciaux (contrôleur et action) et déjà définis, vous n'avez donc rien à faire de spécial pour les obtenir, sauf en vous disant que vous en avez besoin.
Ou vous pouvez inclure un contrôleur, une action dans vos modèles pour en obtenir deux et vos données personnalisées.
la source
Cela semble bien fonctionner pour moi (jusqu'à présent), fonctionne également si vous utilisez le routage d'attributs.
la source
Pour supprimer le besoin d'
ToString()
utiliser l'appella source
string actionName = this.ControllerContext.RouteData.Values ["action"]. ToString ();
string controllerName = this.ControllerContext.RouteData.Values ["controller"]. ToString ();
la source
Pourquoi ne pas avoir quelque chose de plus simple?
Appelez simplement
Request.Path
, il renverra une chaîne séparée par le "/"puis vous pouvez utiliser
.Split('/')[1]
pour obtenir le nom du contrôleur.la source
http://www.example.com/sites/site1/controllerA/actionB/
. MVC fournit un tas d'API pour le routage, alors pourquoi avez-vous besoin d'analyser (à nouveau) les URL?.controller/action