尝试检查控制器名称时,Html.ActionLink没有输出

时间:2011-08-17 05:24:51

标签: asp.net-mvc-3 razor

这可能是一个简单的疏忽,但我没有看到问题,所以我想我会要求一些快速的帮助。我对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>

任何想法我做错了什么?这只是一个语法问题吗?

2 个答案:

答案 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)

希望这有帮助。