使用bootstrap我遇到了必须在某些链接上设置活动类的问题。我在interwebs上找到了这个帮助方法,并为它添加了一些功能。基本上我想添加RouteValueDictionary和Html项目。出于某种原因,我的观点是传递一个空的RouteValueDictionary而不是我填充的值。
我认为我的问题是我在视图方面遗漏了某些内容,所呈现的HTML实际上可能无法按照应有的方式生成路由值。
扩展方法:
public static MvcHtmlString MenuLink(this HtmlHelper pHtmlHelper, string pLinkText, string pActionName, string pControllerName, RouteValueDictionary pRouteValues)
{
var vCurrentAction = pHtmlHelper.ViewContext.RouteData.GetRequiredString("action");
var vCurrentController = pHtmlHelper.ViewContext.RouteData.GetRequiredString("controller");
var vBuilder = new TagBuilder("li") { InnerHtml = pHtmlHelper.ActionLink(pLinkText, pActionName, pControllerName, pRouteValues, null).ToHtmlString() };
if (pControllerName == vCurrentController && pActionName == vCurrentAction) vBuilder.AddCssClass("active");
return new MvcHtmlString(vBuilder.ToString());
}
查看(部分):
@Html.MenuLink("Account", "Details", "Dashboard", new RouteValueDictionary(new {id="Account"}))
呈现HTML:
<a href="/Dashboard/Details/Account">Account</a>
同样,我遇到的问题是MenuLink得到一个null的RouteValueDictionary,我觉得它应该包含id!
(注意...... pHtmlHelper.ViewContext.RouteData实际上包含其中的id标签&#39; RouteData值....)
答案 0 :(得分:0)
假设您的路线看起来像(根据路线的顺序),您的代码按预期工作:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters*
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
所以代码:
pHtmlHelper.ActionLink(
pLinkText, // Link Text
pActionName, // Action
pControllerName, // Controller
pRouteValues, // Route Values
null)
.ToHtmlString() };
网址将是
/Dashboard/Details/{id}
路线值:
{
id="Account"
}
变为:
/Dashboard/Details/Account