Mvc3实现自定义动作链接

时间:2012-01-29 09:44:08

标签: asp.net-mvc-3

我有.net mvc3网站。我必须实现顶级菜单。每个菜单标签都会导致他的动作并显示另一个视图。这就是我现在所拥有的:

<ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
        <li>@Html.ActionLink("Products", "Products", "Home")</li>
        <li>@Html.ActionLink("Pricing", "Pricing", "Home")</li>
        <li>@Html.ActionLink("Our Team", "OurTeam", "Home")</li>
        <li>@Html.ActionLink("Contact Us", "ContactUs", "Home")</li>
</ul><!-- /menu -->

此视图在我的布局中为Html.RenderAction("Header", "Home");(因为它必须显示在所有页面中) 我需要实现Custom ActionLink。锚文本必须是:

<span>text</span><b>text</b>

“文字”是主页(例如第一个li) 当前的ActionLink必须将类:“Selected”添加到锚点。

我怎么能这样做?请帮忙

P.S 我可以使用当前视图的“选定”类为我网站中的每个视图添加此菜单,但这不是一个好的解决方案。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望将“选定”类放到当前显示操作中。 您可以通过以下方式检查视图:

HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()
HttpContext.Current.Request.RequestContext.RouteData.Values["action"].ToString()

然后你按照上一个答案中显示的方式将“选定”类放到你的动作链接中

<li>@Html.ActionLink("Home", "Index", "Home", null, new {@class = ":selected"})</li>

就个人而言,我将创建一个ViewModel,其中包含一个“MenuAction”列表,除路由值外,还显示bool属性“Selected”。视图中的Imo将更清晰地处理数据。

答案 1 :(得分:0)

您可以使用此class重载添加ActionLink

<li>@Html.ActionLink("Home", "Index", "Home", null, new {@class = ":selected"})</li>

第五个参数是HTML属性。

MSDN此次重载的ActionLink


更新

$(function(){
    var controllerName ='ViewContext.RouteData.Values["Controller"]';
    $('#' +controllerName).addClass(':selected');
});