RouteLink in HtmlHelper?

2.9k Views Asked by At

How can I make up a RouteLink in a custom HtmlHelper? I know how to make it in a partial view but I want to build up a new link in a custom htmlhelper extension method with the use of a RouteLink. How to accomplish this?

Update: I noticed HtmlHelper.GenerateRouteLink. But what do I need to put in as parameters?

2

There are 2 best solutions below

1
On BEST ANSWER

Here's an example. Let's suppose that you want to wrap the links into a div tag with some given class so that your resulting html looks like this:

<div class="foo"><a href="/home/index">Some text</a></div>

You could write the following extension method:

public static class HtmlExtensions
{
    public static MvcHtmlString CustomRouteLink(
        this HtmlHelper htmlHelper, 
        string className, 
        string linkText, 
        object routeValues
    )
    {
        var div = new TagBuilder("div");
        div.MergeAttribute("class", className);
        div.InnerHtml = htmlHelper.RouteLink(linkText, routeValues).ToHtmlString();
        return MvcHtmlString.Create(div.ToString());
    }
}

which could be used like this:

<%= Html.CustomRouteLink("foo", "Some text", 
    new { action = "index", controller = "home" }) %>

and this will produce the desired markup. Any other overloads of RouteLink could be used if necessary.

3
On

Once you get an instance of the UrlHelper you should be able to do whatever you want to do in your HtmlHelper method

UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);