我是ASP.NET Core的新手。我有一个导航菜单,我想跟踪活动项目。 我的想法是使用动作和控制器名称作为导航键:
问题是我不知道如何在_Layout.cshtml视图中获取动作和控制器名称......
我尝试了ViewContext.ActionDescriptor.DisplayName
,但它会呈现类似 MyApp.Controllers.RecordsController.Index (MyApp)
我宁愿选择这样的东西:
<script>$("li#@(Controller.Name)-@(Action.Name)")).addClass("active");</script>
答案 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;)