RouteValueDictionary在Extension方法中作为null出现

时间:2015-01-30 20:12:46

标签: c# twitter-bootstrap asp.net-mvc-4 routevalues

使用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值....)

1 个答案:

答案 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