Html 无法突出显示MVC 4中的活动链接

Html 无法突出显示MVC 4中的活动链接,html,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-helpers,Html,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Helpers,我试图强调MVC4中的当前链接,但我不能这样做,我正在分享我迄今为止所做的事情 MenuHelper扩展: public static class MenuHelper { public static MvcHtmlString ListItemAction(this HtmlHelper helper, string name, string actionName, string controllerName) { var cur

我试图强调MVC4中的当前链接,但我不能这样做,我正在分享我迄今为止所做的事情

MenuHelper扩展:

public static class MenuHelper
    {
        public static MvcHtmlString ListItemAction(this HtmlHelper helper, string name, string actionName, string controllerName)
        {
            var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
            var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];
            var sb = new StringBuilder();

            sb.AppendFormat("<li{0}", (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) &&
                                                currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)
                                                    ? " class=\"active\">" : ">"));
            var url = new UrlHelper(HttpContext.Current.Request.RequestContext);
            sb.AppendFormat("<a href=\"{0}\">{1}</a>", url.Action(actionName, controllerName), name);
            sb.Append("</li>");
            return new MvcHtmlString(sb.ToString());
        }
    }
公共静态类菜单帮助
{
公共静态MvcHtmlString ListItemAction(此HtmlHelper帮助程序、字符串名称、字符串操作名称、字符串控制器名称)
{
var currentControllerName=(string)helper.ViewContext.RouteData.Values[“controller”];
var currentActionName=(字符串)helper.ViewContext.routedData.Values[“action”];
var sb=新的StringBuilder();
sb.附录格式(“:“>”);
var url=newURLhelper(HttpContext.Current.Request.RequestContext);
sb.AppendFormat(“”,url.Action(actionName,controllerName),name);
某人追加(“”);
返回新的MvcHtmlString(sb.ToString());
}
}
这是我的HTML

<li class="has-sub active">
            <a href="javascript:;" class="">
                <i class="icon-magnet"></i>Manage
                <span class="arrow open"></span>
                <span class="selected"></span>
            </a>
            <ul class="sub">
                @{


                        @Html.ListItemAction("Parts", "Index", "Part")
                        @Html.ListItemAction("Categories", "Index", "Category")
                        @Html.ListItemAction("Tickets", "Index", "Ticket")
                        @Html.ListItemAction("SearchLog", "Index", "SearchLog")
                        @Html.ListItemAction("Reviews", "Index", "Review")


                }



            </ul>

        </li>
    • @{ @ListItemAction(“部分”、“索引”、“部分”) @ListItemAction(“类别”、“索引”、“类别”) @ListItemAction(“票证”、“索引”、“票证”) @ListItemAction(“搜索日志”、“索引”、“搜索日志”) @ListItemAction(“评论”、“索引”、“评论”) }

  • 这只是突出显示链接,但由于我的设计,我也想更改LI标记类。我还有其他链接,我希望当点击链接时,父LI标记将被分配活动类。我如何才能做到这一点?我搜索了internet,但找不到任何方法来解决此问题。

    这是我的菜单帮助程序,其中包含嵌套链接,因此它同时突出显示活动链接和父菜单项。我想你可以根据你的解决方案修改它

    public static MvcHtmlString MenuItem(this HtmlHelper htmlHelper,
                                             MenuItem menuItem)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            var li = new TagBuilder("li");
            var routeData = htmlHelper.ViewContext.RouteData;
            var currentAction = routeData.GetRequiredString("action");
            var currentController = routeData.GetRequiredString("controller");
            var isSelected = false;
            if (string.Equals(currentAction,
                              menuItem.item.Action,
                              StringComparison.OrdinalIgnoreCase) &&
                string.Equals(currentController,
                              menuItem.item.Controller,
                              StringComparison.OrdinalIgnoreCase) && menuItem.item.Action != "")
            {
                li.AddCssClass("start active");
                isSelected = true;
    
            }
            else if (menuItem.item.Action == "" && string.Equals(currentController,
                              menuItem.item.Controller,
                              StringComparison.OrdinalIgnoreCase))
            {
                li.AddCssClass("active open");
                isSelected = true;
            }
    
            var tag = new TagBuilder("a");
    
            tag.InnerHtml = "<i class=\"" + menuItem.item.Ikon + "\"></i> <span class=\"title\">" + menuItem.item.MenuYazisi + "</span>";
            if (isSelected) tag.InnerHtml += "<span class=\"selected\"></span>";
            if (menuItem.item.MenuEleman1.Count > 0)
            {
                if (isSelected)
                {
                    tag.InnerHtml += "<span class=\"arrow open\"></span>";
                }
                else
                {
                    tag.InnerHtml += "<span class=\"arrow \"></span>";
    
                }
            }
    
            tag.MergeAttribute("href",
                menuItem.childItems.Any()
                    ? "javascript:;"
                    : urlHelper.Action(menuItem.item.Action, menuItem.item.Controller));
            li.InnerHtml = tag.ToString();
    
            if (menuItem.childItems.Any())
            {
                li.InnerHtml += "<ul class=\"sub-menu\">";
                foreach (var item in menuItem.childItems)
                {
                    var liTemp = new TagBuilder("li");
                    if (string.Equals(currentAction,
                              item.Action,
                              StringComparison.OrdinalIgnoreCase) &&
                               string.Equals(currentController,
                              item.Controller,
                              StringComparison.OrdinalIgnoreCase))
                    {
                        liTemp.AddCssClass("active");
                    }
                    var aTemp = new TagBuilder("a");
                    aTemp.MergeAttribute("href", urlHelper.Action(item.Action, item.Controller));
                    aTemp.InnerHtml = item.MenuYazisi;
                    liTemp.InnerHtml += aTemp.ToString();
                    li.InnerHtml += liTemp.ToString();
                }
                li.InnerHtml += "</ul>";
            }
            return MvcHtmlString.Create(li.ToString());
        }
    
    公共静态MvcHtmlString菜单项(此HtmlHelper HtmlHelper,
    菜单项(菜单项)
    {
    var urlHelper=新的urlHelper(htmlHelper.ViewContext.RequestContext);
    var li=新标记生成器(“li”);
    var routeData=htmlHelper.ViewContext.routeData;
    var currentAction=RoutedData.GetRequiredString(“操作”);
    var currentController=RoutedData.GetRequiredString(“控制器”);
    var isSelected=假;
    如果(字符串)等于(当前动作,
    menuItem.item.Action,
    StringComparison.OrdinalingoreCase)&&
    string.Equals(currentController,
    menuItem.item.Controller,
    StringComparison.OrdinalIgnoreCase)和&menuItem.item.Action!=“”)
    {
    li.添加CSSClass(“启动活动”);
    isSelected=true;
    }
    else if(menuItem.item.Action==”&&string.Equals(currentController,
    menuItem.item.Controller,
    StringComparison.Ordinalingorecase)
    {
    li.添加CSSClass(“主动打开”);
    isSelected=true;
    }
    var标记=新标记生成器(“a”);
    tag.InnerHtml=“”+menuItem.item.MenuYazisi+”;
    如果(isSelected)tag.InnerHtml+=“”;
    如果(menuItem.item.MenuEleman1.Count>0)
    {
    如果(当选)
    {
    tag.InnerHtml+=“”;
    }
    其他的
    {
    tag.InnerHtml+=“”;
    }
    }
    tag.MergeAttribute(“href”,
    menuItem.childItems.Any()
    ?“javascript:;”
    :urlHelper.Action(menuItem.item.Action,menuItem.item.Controller));
    li.InnerHtml=tag.ToString();
    if(menuItem.childItems.Any())
    {
    li.InnerHtml+=“
      ”; foreach(menuItem.childItems中的变量项) { var liTemp=新标记生成器(“li”); 如果(字符串)等于(当前动作, 项目.行动, StringComparison.OrdinalingoreCase)&& string.Equals(currentController, 项目.主计长, StringComparison.Ordinalingorecase) { liTemp.AddCssClass(“活动”); } var aTemp=新标记生成器(“a”); aTemp.MergeAttribute(“href”,urlHelper.Action(item.Action,item.Controller)); aTemp.InnerHtml=item.MenuYazisi; liTemp.InnerHtml+=aTemp.ToString(); li.InnerHtml+=liTemp.ToString(); } li.InnerHtml+=“
    ”; } 返回MvcHtmlString.Create(li.ToString()); }
    谢谢您的评论,但是您的代码给出了错误,比如“item”、MenuYazisi、item.action“(menuItem.ChildItems.Any())”为什么会这样?有人可以这样做吗?