Highlight Current Link
One thing that I see that I would change is the if statement


    if (String.Equals(action, currentAction as string,
              StringComparison.OrdinalIgnoreCase)
        &amp;&amp;
       String.Equals(controller, currentController as string,
               StringComparison.OrdinalIgnoreCase))
    {
        builder.AddCssClass("active");
        return MvcHtmlString.Create(builder.ToString());
    }



I personally don't like having a conditional that spans over multiple lines,  so the first thing that I would do is to take the boolean conditions and make them into boolean variables and then use them inside the conditional.  I think it would be easier to read. 

bool isCurrentAction = String.Equals(action, currentAction as string,
          StringComparison.OrdinalIgnoreCase);
bool isCurrentController = String.Equals(controller, currentController as string,
           StringComparison.OrdinalIgnoreCase);
if (isCurrentAction &amp;&amp; isCurrentController)
{
    builder.AddCssClass("active");
    return MvcHtmlString.Create(builder.ToString());
}


And since you are returning builder immediately after the if statement, there isn't really a reason to return inside the if statement, it is rather redundant.  Just delete that from the if block

bool isCurrentAction = String.Equals(action, currentAction as string,
          StringComparison.OrdinalIgnoreCase);
bool isCurrentController = String.Equals(controller, currentController as string,
           StringComparison.OrdinalIgnoreCase);
if (isCurrentAction &amp;&amp; isCurrentController)
{
    builder.AddCssClass("active");
}