跟踪当前活动页面,或如何在视图中获取控制器和操作名称

时间:2017-08-03 08:47:26

标签: razor asp.net-core

我是ASP.NET Core的新手。我有一个导航菜单,我想跟踪活动项目。 我的想法是使用动作和控制器名称作为导航键:

enter image description here

问题是我不知道如何在_Layout.cshtml视图中获取动作和控制器名称......

我尝试了ViewContext.ActionDescriptor.DisplayName,但它会呈现类似 MyApp.Controllers.RecordsController.Index (MyApp)

的内容

我宁愿选择这样的东西:

<script>$("li#@(Controller.Name)-@(Action.Name)")).addClass("active");</script>

4 个答案:

答案 0 :(得分:30)

使用

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: 如果需要,请使用ToLower()

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

您也可以按样式块

激活菜单
<style>
li#@(ViewContext.RouteData.Values["Controller"])-@(ViewContext.RouteData.Values["Action"]) {
//add some style
}
</style>

答案 1 :(得分:8)

使用针对剃刀页面的dot net core 2.0,您可以像这样使用

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

在标签上

<li class="@(page == "/index" ?  "active" : "")"><a asp-page="/Index" >Home</a></li>

答案 2 :(得分:1)

如果将this answer与以下内容合并,则可以实现此服务器端。

您认为的某个地方。

WebElement element = driver.findElement(By.id("gbqfd"));
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", element);

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

<li>

答案 3 :(得分:1)

我想添加一些可能被忽略的小东西... 在HTML开始之前,只需在顶部的布局页面中添加一些嵌入式代码即可。

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

代码很不言自明... 然后像在代码中一样,从代码中的任何位置直接调用变量的值,如下所示:

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

我发现此方法比上述方法更简单,更轻松。 Cheerio;)