0

使用引导程序我遇到了必须在某些链接上设置活动类的问题。我在互联网上找到了这个辅助方法,并正在向它添加一些功能。基本上我想向它添加 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 获得了一个空的 RouteValueDictionary,我觉得它应该包含 id!

(注意... pHtmlHelper.ViewContext.RouteData 实际上在它的 RouteData 值中包含 id 标签......)

4

1 回答 1

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
于 2015-01-30T22:42:45.733 回答