2017-12-29 4 views
0

Ich habe einige Seiten mit "Gentelella Alela" Vorlage erstellt, wenn ich Seiten erstellen, hat es die Fähigkeit, Navigation aktiv (mit 'aktuelle Seite' Klasse) basierend zu drehen auf Controller und Aktionsname:MVC Navigation aktiv halten, wenn Redirect auf "Hinzufügen" Seite

enter image description here:

enter image description here

I "in" -Aktion in RoleController ich hinzufügen, wenn ich auf "/ Admin/Rollen/Add" umleiten, wird die Navigation aktiv gegangen

Irgendeine Idee wie soll ich es funktionieren lassen? enter image description here

_Layout.cshtml Navigationscode:

Der Auslöseknopf ist auf diese Weise codiert enter image description here

+0

Wie Sie "current-Seite" angeben werden. Würdest du auch die Layout-Seite teilen? – lucky

+0

Die aktuelle Seite Klasse kommt mit der Vorlage, aktualisiert meinen Beitrag für _Layout.cshtml –

Antwort

0

Ein einfacher Weg,

ViewData["ActivePage"] = ActivePage(); 

private string ActivePage() 
     { 
      string actionName = this.ControllerContext 
       .RouteData 
       .Values["action"] 
       .ToString(); 

      string controllerName = this.ControllerContext 
       .RouteData 
       .Values["controller"] 
       .ToString(); 

      return string.Format($"{controllerName}-{actionName}"); 
     } 

Sie aktive Seite aufrufen kann, ist mit Base zu tun bevor die Aktion ausgeführt wird. Danach müssen Sie diese ViewData auf Layout-Seite überprüfen.

$(document).ready(function() { 
      var activePageName = '@ViewData["ActivePage"]'; 

      var activeElement = $('li.' + activePageName); 
      activeElement.addClass('active'); 

      $.each(activeElement.parents('li'), function (k, v) { 
       $(v).addClass('active'); 
      }); 
     }); 

Und vor dem Skript muss Ihr ul und li-Element einen bestimmten Namen enthalten, um es zu erkennen. Sie müssen das in der BaseController ActivePage-Methode ControllleName-ActionName angegebene Format verwenden.

<ul class="nav nav-second-level collapse"> 
         <li class="Home-Index"> 
          @Html.ActionLink("Index", "Index", "Home") 
         </li> 
        </ul> 
0
public static class Utilities 
    { 
     public static string IsActive(this HtmlHelper html, 
             string control, 
             string action) 
     { 
      var routeData = html.ViewContext.RouteData; 

      var routeAction = (string)routeData.Values["action"]; 
      var routeControl = (string)routeData.Values["controller"]; 

      // both must match 
      var returnActive = control == routeControl && 
           action == routeAction; 

      return returnActive ? "current-page" : ""; 
     } 
    } 


<li class="treeview @Html.IsActive("Home", "Index") "> 
<a href="@Url.Action("Index", "Dashboard", new { Area = "" })"><i class="fa fa-dashboard"></i> <span>Dashboard</span></a> 
</li> 
Verwandte Themen