2010-11-26 13 views
2

Quel serait le meilleur/le plus approprié pour obtenir les éléments suivants dans mon application Web MVC? J'ai une vue appelée Site.Master (c'est ma vue MasterPage), et en haut de cette vue, j'ai 5 liens, qui agissent comme ma navigation de site principale, par exemple.Application de styles par programmation dans ASP.NET MVC MasterPage View

<ul> 
    <li><a href="">Home</a></li> 
    <li><a href="">Links</a></li> 
    <li><a href="">Contact Us</a></li> 
    ...etc 
</ul> 

Ce que je veux est d'être en mesure de mettre en évidence le lien de texte approprié, selon laquelle une partie du site de l'utilisateur est actuellement connecté, donc s'ils utilisaient la page «Contactez-nous, le lien Contactez-nous sur la page maître, un style CSS différent est appliqué.

Dans Web Forms, chacun de mes liens était un contrôle HyperLink et j'avais une propriété dans le code derrière la MasterPage afin d'assigner le CssStyle à chaque contrôle HyperLink.

Quel serait le meilleur moyen d'obtenir la même chose dans ma vue MasterPage, maintenant j'utilise MVC?

Répondre

4

Je probablement écrire une aide HTML qui va générer ces liens de menu et en fonction du régulateur de courant et d'action appliquera une classe css current à l'ancre:

public static MvcHtmlString MenuLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName 
) 
{ 
    string currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action"); 
    string currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller"); 
    if (actionName == currentAction && controllerName == currentController) 
    { 
     return htmlHelper.ActionLink(
      linkText, 
      actionName, 
      controllerName, 
      null, 
      new { 
       @class = "current" 
      }); 
    } 
    return htmlHelper.ActionLink(linkText, actionName, controllerName); 
} 

Et puis utiliser cette aide à mon avis :

<ul> 
    <li><%= Html.MenuLink("Home", "Index", "Home") %></li> 
    <li><%= Html.MenuLink("Links", "Links", "Home") %></li> 
    <li><%= Html.MenuLink("Contact us", "Contact", "Home") %></li> 
</ul> 

Ensuite, tout ce qui reste est de définir cette classe current dans un fichier CSS pour mettre en évidence:

.current { 
    ... 
} 
+0

Bonjour Darin. Cela fonctionne presque parfaitement. Le problème que j'ai est que pour une de ces sections du site, j'y arrive via 1 des 2 actions possibles pour ce contrôleur (Article ou DernierArticle). J'ai une vue partielle que j'utilise sur le site qui appelle l'action 'Article' plutôt que l'action 'DernierArticle' par défaut, donc chaque fois que je navigue vers cette section du site via ma vue partielle, la condition dans la méthode Helper n'est jamais rencontré, car 'Article' n'est jamais passé à ma méthode MenuLink en tant que paramètre actionName. Aucune suggestion? – marcusstarnes

+0

Eh bien tout ce que vous avez à faire est de modifier la signature de la méthode d'assistance pour accepter une liste d'actions au lieu d'une seule action et ensuite vérifier que l'action en cours correspond à l'un des éléments de cette liste. –