Track the current active page, or how to get controller and action names in a view

前端 未结 4 1226
滥情空心
滥情空心 2020-12-31 03:55

I am new in ASP.NET Core. I have a navigation menu and I would like to track the active item. My idea is to use the action and controller names as navigation keys:

<

相关标签:
4条回答
  • 2020-12-31 04:38

    I would like to add something small that has perhaps been overlooked... Just add some embedded code in the layouts page at the top, before the HTML begins...

    @{
        var controller = ViewContext.RouteData.Values["Controller"];
        var action = ViewContext.RouteData.Values["Action"];
    }
    

    The code is pretty self-explanatory... Then call the variables' values from anywhere within your code just as they are, like the way I did as shown below:

    <div class="navbar-wrapper">
    <h3>@controller | @action</h3>
    </div>
    

    I found this method to be much simpler and hassle-free than aforementioned methods. Cheerio ;)

    0 讨论(0)
  • 2020-12-31 04:49

    With dot net core 2.0 for razor pages you could use like this

    var rv = ViewContext.RouteData.Values;
    string page = $"{rv["page"]}".ToLowerInvariant();
    

    On the tags

    <li class="@(page == "/index" ?  "active" : "")"><a asp-page="/Index" >Home</a></li>
    
    0 讨论(0)
  • 2020-12-31 04:53

    You can achieve this server side if you combine this answer with the following.

    Somewhere in your view.

    @{
        var rv = ViewContext.RouteData.Values;
        var id = $"{rv["Controller"]}-{rv["Action"]}".ToLowerInvariant();
    }
    

    On each <li>.

    <li class-conditional-active="@(id == "records-index")">...</li>
    
    0 讨论(0)
  • 2020-12-31 04:59

    Use

    var controller = ViewContext.RouteData.Values["Controller"];
    var action = ViewContext.RouteData.Values["Action"];
    
    <script>
    $("li#@(ViewContext.RouteData.Values["Controller"])-@(ViewContext.RouteData.Values["Action"])")).addClass("active");
    </script>
    

    PS: Use ToLower() if required

    ViewContext.RouteData.Values["Action"].ToString().ToLower();
    

    Also you can activate your menu by style block

    <style>
    li#@(ViewContext.RouteData.Values["Controller"])-@(ViewContext.RouteData.Values["Action"]) {
    //add some style
    }
    </style>
    
    0 讨论(0)
提交回复
热议问题