2009-01-17 15 views
7

Je souhaite inclure un lien dans mon SiteMaster (en utilisant Html.ActionLink) SAUF la vue à laquelle je suis lié est la vue actuelle. Par exemple, il n'y a pas de sens à afficher un lien "Register" lorsque l'utilisateur voit déjà la vue "Register".Version ASP.NET MVC de Ruby on Rails "link_to_unless_current"

Dans Ruby on Rails, j'utilise la méthode "link_to_unless_current" pour ce faire.

Comment dupliquer ce comportement dans ASP.NET MVC? Le mieux que je puisse trouver est de définir un booléen dans mon contrôleur pour indiquer que le lien devrait être caché (puisqu'il est courant). Cela semble vraiment gênant comparé à l'approche de Rails, donc je pense que je dois manquer quelque chose.

Répondre

10

Je ne suis pas au courant de cette méthode d'assistance dans ASP.NET MVC, mais il devrait être assez facile à rouler votre propre:

public static class HtmlExtensions 
{ 
    public static string ActionLinkUnlessCurrent(this HtmlHelper htmlHelper, string linkText, string actionName) 
    { 
     string currentAction = htmlHelper.ViewContext.RouteData.Values["action"].ToString(); 
     if (actionName != currentAction) 
     { 
      return htmlHelper.ActionLink(linkText, actionName); 
     } 
     return linkText; 
    } 
} 

Et puis utiliser comme ceci:

<%= Html.ActionLinkUnlessCurrent("Link Text", "Index") %>