2012-01-29 8 views
0

J'ai un site Web .net mvc3. Et je dois mettre en place le menu principal. Chacune des balises de menu est amené à son action et afficher un autre view.This ce que je viens:Mvc3 mettre en œuvre un lien d'action personnalisé

<ul id="menu"> 
     <li>@Html.ActionLink("Home", "Index", "Home")</li> 
     <li>@Html.ActionLink("Products", "Products", "Home")</li> 
     <li>@Html.ActionLink("Pricing", "Pricing", "Home")</li> 
     <li>@Html.ActionLink("Our Team", "OurTeam", "Home")</li> 
     <li>@Html.ActionLink("Contact Us", "ContactUs", "Home")</li> 
</ul><!-- /menu --> 

Ce point de vue est Html.RenderAction("Header", "Home"); dans ma mise en page (car il doit apparaître dans toutes les pages) que je dois mettre en œuvre ActionLink personnalisé Le texte d'ancrage doit être:

<span>text</span><b>text</b> 

Le « texte » est la maison (par exemple la première li) Et le ActionLink actuel doit ajouter la classe: « Sélectionné » à l'ancre.

Comment je peux faire ça? Aide s'il vous plaît

p.s Je peux ajouter ce menu pour chaque vue de mon site Web avec la classe "sélectionnée" de la vue actuelle, mais ce n'est pas une bonne solution.

Répondre

1

Si je comprends bien, vous voulez mettre la classe "sélectionnée" à l'action affichage en cours. Vous pouvez faire une vérification dans la vue en regardant ceci:

HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString() 
HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString() 

Ensuite, vous mettez la classe « sélectionnée » à votre ActionLink le chemin montré dans la réponse précédente

<li>@Html.ActionLink("Home", "Index", "Home", null, new {@class = ":selected"})</li> 

Personnellement, je vais créer un ViewModel contenant une liste de "MenuAction" qui expose, autre que les valeurs de route, une propriété booléenne "Selected". Imo de la vue sera beaucoup plus propre le traitement des données.

+0

C'est une bonne solution. Mais mon menu est une vue partielle et appelé à partir de la mise en page. donc HttpContext.Current.Request.RequestContext.RouteData.Values ​​["action"]. ToString() renverra toujours le nom de ce partiel, et ce nom ne correspondra jamais au nom de l'action en cours .. –

+0

Appelez quelque chose comme ça @ Html.Action ("Menu principal", "Menu"). que vous faites la logique et préparer la vue dans le contrôleur – Iridio

+0

Mon erreur j'ai utilisé var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString ("action") au lieu de HttpContext.Current.Request.RequestContext.RouteData.Values ​​["action"]. ToString(). C'est du travail maintenant. Merci –

0

Vous pouvez ajouter class avec cette ActionLink surcharge:

<li>@Html.ActionLink("Home", "Index", "Home", null, new {@class = ":selected"})</li> 

Le 5ème paramètre est attributs HTML.

MSDN ActionLink de cette surcharge


Mise à jour:

$(function(){ 
    var controllerName ='ViewContext.RouteData.Values["Controller"]'; 
    $('#' +controllerName).addClass(':selected'); 
}); 
+0

Vous ajoutez une classe "sélectionnée" statique au lien Accueil. Je dois ajouter dynamiquement "selected" à ActionLink actuel –

+0

@ user1086344. Quand voulez-vous l'ajouter? – gdoron

+0

Lorsque vous cliquez sur "Produits" par exemple, la page va charger la vue "produits" et la classe "sélectionnée" doit être ajoutée à l'ancre "produits" et supprimée de l'ancre précédente. –

Questions connexes