【问题标题】:No output from Html.ActionLink when trying to check Controller name尝试检查控制器名称时 Html.ActionLink 没有输出
【发布时间】:2011-08-17 05:24:50
【问题描述】:

这可能是一个简单的疏忽,但我没有发现问题,所以我想我会寻求一些快速帮助。我对 MVC(和 Razor)也有些陌生,所以这也可能与它有关。基本上,这就是我的 Razor 视图中的内容,它为导航栏呈现了一些列表项。如果(根据控制器名称)它是被请求的页面,我只是想在元素上设置一个“selected”类。

<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>

我得到的结果只是一个空的列表项元素:&lt;li&gt;&lt;/li&gt;

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

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    您需要在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>
    

    【讨论】:

    • 谢谢 - 就是这样。我没有意识到它之前仍然需要 @ 字符,因为它在 @{ } 块内。您对区分 html 输出和普通方法调用的解释对我来说实际上是新闻,因为我还是一个 Razor 新手。
    【解决方案2】:

    比较路由名称以防不敏感 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)

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多