2010-03-02 3 views
0

je page maître, dans le fond dont j'ai tel menu:Catch Nom de la méthode du contrôleur

<div class="footMenu"> 
    <ul> 
     <li class="active"><a href="">test1</a> </li> 
     <li><a href="">test2</a></li> 
     <li><a href="">test3</a></li>    
    </ul> 
</div> 

Selon le point de vue chargé je dois mettre class="active" en face de l'élément en cours de li.

Comment cela peut-il être fait?

+0

J'utilise asp.net mvc – kusanagi

Répondre

1

Dans une application mvc asp.net, je résous généralement cela en définissant un identifiant de l'étiquette de corps qui contient à la fois le nom du contrôleur et le nom de l'action. Ensuite, j'utilise css pour styliser les liens différemment en fonction de l'identifiant de la balise body.

Je le fais généralement en créant une extension d'assistance html qui obtient la chaîne d'identification pour l'étiquette de corps. Cela peut ressembler à ceci:

public static string BodyId(this HtmlHelper helper) { 
    var controllerName = helper.ViewContext.RouteData.GetRequiredString("controller").ToLower(); 
    var actionName = helper.ViewContext.RouteData.GetRequiredString("action").ToLower(); 

    return string.Format("{0}-{1}", controllerName, actionName); 
} 

utiliser ensuite comme ceci:

<body id="<%=Html.BodyId()%>"> 

Ensuite, vous pouvez mettre ids de tous vos liens aussi bien. Pour le rendre plus clair, ils peuvent également contenir le nom du contrôleur et le nom de l'action à laquelle ils doivent être liés. Quelque chose comme ceci:

<ul> 
    <li><a href="" id="home-index-link">test1</a></li> 
    <li><a href="" id="account-login-link">test2</a></li>  
</ul> 

Ensuite, j'utilise css pour les styler différemment selon qu'ils sont sélectionnés ou non. Quelque chose comme ceci:

#home-index #home-index-link, #account-login #account-login-link { 
    /* Styles for selected links */ 
} 

Il sera, bien sûr, travailler si vous faites la même chose pour la balise <li /> au lieu de la balise <a />.

Si vous ne voulez pas faire comme ça, vous pouvez bien sûr utiliser la routedata (comme je le fais dans mon assistant html ici). La valeur avec la clé "action" contiendra le nom de l'action et la valeur avec la clé "controller" contiendra le nom du contrôleur.

+0

solution très dure. Je suppose que ce sera comme ça

  • class = "actif" <%}%>>Магазин фасадов
  • kusanagi

    +0

    Oui. C'est pourquoi je le fais comme je l'ai expliqué. Pour éviter si des déclarations. Mais si vous voulez écrire des instructions if alors ceci: ViewContext.RouteData.GetRequiredString ("action") (comme je l'ai expliqué à la fin de ma réponse) contiendra le nom de l'action que vous exécutez. –