这可能是一个简单的疏忽,但我没有看到问题,所以我想我会要求一些快速的帮助。我对MVC(和Razor)也有些新意,所以也可能与它有关。基本上,这是我的Razor视图中为导航栏呈现一些列表项的内容。我只是想在元素上设置一个“selected”类,如果(根据Controller名称)它是被请求的页面。
<li>@{ if(Html.ViewContext.RouteData.Values["controller"].ToString() == "AdminHome")
{
Html.ActionLink("Admin Home", "Index", "AdminHome", null, new { @class = "selected" });
}
else{
Html.ActionLink("Admin Home", "Index", "AdminHome");
}
}
</li>
我得到的结果只是一个空的列表项元素:<li></li>
任何想法我做错了什么?这只是一个语法问题吗?
答案 0 :(得分:2)
您需要在@
之前加Html.ActionLink
前缀。否则,MVC将此视为普通方法调用而不是输出html
的方法。
<li>
@if(Html.ViewContext.RouteData.Values["controller"].ToString() == "AdminHome"){
@Html.ActionLink("Admin Home", "Index", "AdminHome", null, new { @class = "selected" });
}
else{
@Html.ActionLink("Admin Home", "Index", "AdminHome");
}
</li>
答案 1 :(得分:0)
在不区分情况下比较路由名称 String.Equals(Html.ViewContext.RouteData.Values [“controller”]。ToString(),“AdminHome”,StringComparison.CurrentCultureIgnoreCase) 因为路线名称可以是任何情况。这是用户在网址中输入的内容。 例如在url中 www.yourdomain.com/AdminHome/Index(控制器名称为AdminHome,控制器为AdminHomeController) 但是有了网址 www.yourdomain.com/adminhome/index(控制器名称为adminhome,控制器为AdminHomeController)
希望这有帮助。