控制器的Catch方法名称

时间:2010-03-02 09:59:29

标签: model-view-controller hyperlink

我有母版页,在其底部我有这样的菜单:

<div class="footMenu">
    <ul>
        <li class="active"><a href="">test1</a> </li>
        <li><a href="">test2</a></li>
        <li><a href="">test3</a></li>               
    </ul>
</div>

根据加载的视图,我需要将class="active"放在当前li项目之前。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

在asp.net mvc应用程序中,我通常通过设置body标记的id来解决这个问题,该标记包含控制器的名称和操作的名称。然后我根据body标签的id使用css来设置链接的样式。

我通常通过创建一个html帮助扩展来获取body标记的id字符串。这看起来像这样:

public static string BodyId(this HtmlHelper helper) {
    var controllerName = helper.ViewContext.RouteData.GetRequiredString("controller").ToLower();
    var actionName = helper.ViewContext.RouteData.GetRequiredString("action").ToLower();

    return string.Format("{0}-{1}", controllerName, actionName);
}

然后像这样使用它:

<body id="<%=Html.BodyId()%>">

然后你也可以把你所有链接的ID。为了更清楚,它们还可以包含控制器的名称以及它们应链接到的操作的名称。像这样:

<ul>
    <li><a href="" id="home-index-link">test1</a></li>
    <li><a href="" id="account-login-link">test2</a></li>       
</ul>

然后我使用css对它们进行不同的样式设置,具体取决于它们是否被选中。像这样:

#home-index #home-index-link, #account-login #account-login-link {
    /* Styles for selected links */
}

当然,如果您对<li />标记而不是<a />标记执行相同的操作,那么它将起作用。

如果您不想这样做,您当然可以使用routedata(就像我在我的html助手中所做的那样)。键“action”的值将包含操作的名称,键“controller”的值将包含控制器的名称。