Comment obtenez-vous le nom de la zone actuelle dans la vue ou le contrôleur?
Y a-t-il quelque chose comme ViewContext.RouteData.Values["controller"]
pour les zones?
c#
asp.net-mvc
razor
utilisateur202448
la source
la source
ASP.NET Core 1.0
place deMVC6
.. :-)la source
Vous pouvez l'obtenir à partir du contrôleur en utilisant:
la source
Dans ASP.NET Core 1.0, la valeur se trouve dans
ViewContext.RouteData.Values ["zone"];
la source
pageModel.RouteData.Values.TryGetValue("area", out object area)
devrait être utilisé à la place)Je viens d'écrire une entrée de journal ab à ce sujet , vous pouvez le visiter pour plus de détails, mais ma réponse a été de créer une méthode d'extension, illustrée ci-dessous.
Le déclencheur clé était que vous extrayiez la zone MVC des .DataTokens et le contrôleur / l'action des .Values de RouteData.
Ensuite, vous pouvez l'implémenter comme ci-dessous:
la source
area
jeton dans leValues
mais je devais regarder dans leDataTokens
... aucune idée pourquoi.J'ai créé une méthode d'extension pour
RouteData
qui renvoie le nom de la zone actuelle.Depuis
RouteData
est disponible sur les deuxControllerContext
etViewContext
il est accessible dans votre contrôleur et vos vues.Il est également très facile de tester:
Il n'est pas nécessaire de vérifier si
RouteData.DataTokens
est nul car il est toujours initialisé en interne.la source
MVC Futures a une méthode AreaHelpers.GetAreaName (). Cependant, soyez prudent si vous utilisez cette méthode. L'utilisation de la zone actuelle pour prendre des décisions d'exécution concernant votre application peut entraîner un code difficile à déboguer ou non sécurisé.
la source
this.GetName()
et pour l'utilisation actuelle de la méthodeMethodBase.GetCurrentMethod().Name
Je sais que c'est vieux, mais aussi, quand dans un filtre comme ActionFilter, le contexte ne vous fournit pas facilement les informations de zone.
Il peut être trouvé dans le code suivant:
Ainsi, le filterContext est transmis lors du remplacement et le RouteData correct se trouve sous RequestContext. Il y a un RoutData au niveau de base, mais les DataTokens n'ont PAS la zone dans leur dictionnaire.
la source
Pour obtenir le nom de la zone dans la vue, dans ASP.NET Core MVC 2.1:
la source
Obtenez le nom de la zone dans View (.NET Core 2.2):
la source
Je sais que c'est un article très très ancien, mais nous pouvons utiliser la propriété Values exactement de la même manière que les DataTokens
Url.RequestContext.RouteData.Values ["action"] a fonctionné pour moi.
la source
Je ne sais pas pourquoi mais la réponse acceptée ne fonctionne pas. Il renvoie null avec par exemple (peut-être à propos de mvc, j'utilise .net core)
Je débogue toujours la variable et j'y extrait des données.
Essaye ça. Ça marche pour moi
Exemple logique détaillé
la source