Dans ASP.NET MVC 2 - Comment puis-je obtenir l'Itinéraire des Valeurs dans ma manette de navigation afin que je puisse mettre en évidence le lien actuel?
Que j'essaie de faire le Trajet en cours dans ma manette de navigation pour que je puisse exécuter des comparaisons, dans le menu de navigation, les données sont remplies.
Mes Liens de l'objet est comme ceci:
public class StreamNavLinks
{
public string Text { get; set; }
public RouteValueDictionary RouteValues { get; set; }
public bool IsSelected { get; set; }
}
Dans la page principale, je suis en train de passer à l'itinéraire actuel de la valeur liquidative contrôleur comme ceci:
<% Html.RenderAction(
"MenuOfStreamEntries", //action
"Nav", //controller
new { //parameters for action
currentStreamUrl = "Blog",
currentRoute = ViewContext.RouteData } //get route data to compare in controller
); %>
Le problème que je suis en cours d'exécution, c'est que je ne peux pas comprendre comment obtenir les données de currentRoute
. Quelle est la meilleure technique pour obtenir les valeurs ou currentRoute
?
J'ai essayé la syntaxe ressemble à ceci:
currentRoute.Values.routevaluename
et
currentRoute.Values[0]
Mais je n'arrive pas à le faire fonctionner.
Modifier
J'ai aussi essayé de placer ce code dans l'action de la manette de navigation:
var current = RouteData["streamUrl"];
et
var current = this.RouteData["streamUrl"];
Les deux versions me donner ce message d'erreur:
Erreur 1 Ne peut pas appliquer l'indexation [] à une expression de > " type de Système.Web.Le routage.RouteData' C:\pathtocontroller\NavController.cs 25 27
Edit 2
Il est également utile de connaître la route des valeurs que j'essaie de match contre:
routes.MapRoute(null, "", //Only matches the empty URL (i.e. ~/)
new
{
controller = "Stream",
action = "Entry",
streamUrl = "Pages",
entryUrl = "HomePage"
}
);
routes.MapRoute(null, "{streamUrl}/{entryUrl}", //matches ~/Pages/HomePage
new { controller = "Stream", action = "Entry" }
);
Donc, en fin de compte mydomain.com/blog/blogentry1 serait carte à la même contrôleur/action mydomain.com/pages/welcome. Je ne suis pas à la recherche pour le contrôleur de la valeur ou de la valeur de l'action, plutôt que je suis à la recherche d'streamUrl valeur et EntryUrl valeur.
OriginalL'auteur quakkels | 2010-09-07
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de passer des données d'itinéraire à un contrôleur parce que le contrôleur a déjà des connaissances par le biais de la
RouteData
propriété:Maintenant, si vous souhaitez passer quelques simples arguments comme l'action en cours qui a été utilisé pour le rendu de la vue, vous pourriez faire ceci:
Et dans votre contrôleur:
var current = this.RouteData["streamUrl"];
ne compile pas.Devrait être
RouteData.Values["streamUrl"]
J'ai eu la même erreur avec cette syntaxe. Consultez édité question ci-dessus.
Dans votre montage, vous essayez
RouteData["streamUrl"];
alors que je t'ai proposéRouteData.Values["streamUrl"]
. Voir mon commentaire précédent.le diable est dans les détails. lol je suis en train de jouer avec elle à nouveau maintenant.
OriginalL'auteur Darin Dimitrov
Prises de ce bon article.
Créer une méthode d'extension personnalisée:
Votre balisage HTML:
Produit la sortie suivante:
OriginalL'auteur codingbadger
Voici un exemple de la méthode que nous avons écrit pour faire quelque chose de similaire.
n'a pas montré comment utiliser IsCurrentAction() fonction. fournir à l'utilisation trop.
OriginalL'auteur Josh