向Html.MenuItem添加一个类

时间:2012-01-04 21:52:31

标签: model-view-controller asp.net-mvc-2 asp.net-mvc

我有一个由MVC 2生成的菜单项的HTML列表。

<%= Html.MenuItem("Home", "Home", "Index")%>
<%= Html.MenuItem("Login", "Login", "Account")%>

以HTML格式生成:

<li>
  <a href="Index">Home</a>
</li>

<li>
  <a href="Account">Login</a>
</li>

如何在列表中为列表中的每个项目添加CSS类?

1 个答案:

答案 0 :(得分:3)

我猜这个MenuItem是你编写的扩展方法,或者是你从某人那里拿来的,我也猜测它们正在包装一个ActionLink方法,如:

public static string MenuItem(this HtmlHelper helper, string linkText, string actionName, string controllerName)
{
    string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
    string currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

    // Add selected class
    if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
        return string.Concat("<li class=\"selected\">", helper.ActionLink(linkText, actionName, controllerName), "</li>");

    // Add link
    return string.Concat("<li>", helper.ActionLink(linkText, actionName, controllerName), "</li>");
}

如果是这种情况,只需将css类作为参数,并使用接收htmlattributes的ActionLink,如:

public static string MenuItem(this HtmlHelper helper, string linkText, string actionName, string controllerName, string cssClass = "menu-item")
{
    string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
    string currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

    // Add selected class
    if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
        return string.Concat("<li class=\"selected\">", helper.ActionLink(linkText, actionName, controllerName), "</li>");

    // Add link
    return string.Concat("<li>", helper.ActionLink(linkText, actionName, controllerName, new {@class = cssClass} ), "</li>");
}

然后你就这样打电话给他们:

<%= Html.MenuItem("Home", "Home", "Index", "index-tem")%>