Html 无法突出显示MVC 4中的活动链接
我试图强调MVC4中的当前链接,但我不能这样做,我正在分享我迄今为止所做的事情 MenuHelper扩展: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
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())”为什么会这样?有人可以这样做吗?