RouteLink в HtmlHelper?

Как создать RouteLink в пользовательском HtmlHelper? Я знаю, как сделать это в частичном представлении, но я хочу создать новую ссылку в пользовательском методе расширения htmlhelper с использованием RouteLink. Как это сделать?

Обновление: я заметил HtmlHelper.GenerateRouteLink. Но что мне нужно указать в качестве параметров?


person Nyla Pareska    schedule 22.06.2010    source источник


Ответы (2)


Вот пример. Предположим, вы хотите заключить ссылки в тег div с некоторым заданным классом, чтобы итоговый HTML-код выглядел так:

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

Вы можете написать следующий метод расширения:

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());
    }
}

который можно было бы использовать так:

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

и это даст желаемую разметку. Любые другие перегрузки RouteLink можно использовать при необходимости.

person Darin Dimitrov    schedule 22.06.2010
comment
Спасибо. Сначала у меня были некоторые проблемы из-за отсутствия оператора using, поэтому RouteLink не был известен, и даже Resharper не нашел его правильно. Сейчас я использовал метод LinkExtensions RouteLink. - person Nyla Pareska; 23.06.2010

Как только вы получите экземпляр UrlHelper, вы сможете делать все, что хотите, в своем методе HtmlHelper.

UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);
person runxc1 Bret Ferrier    schedule 22.06.2010
comment
Это должен быть новый UrlHelper(helper.ViewContext.RequestContext); - person Nyla Pareska; 22.06.2010
comment
Это, кажется, не идет в правильном направлении. Любое другое предложение? - person Nyla Pareska; 22.06.2010
comment
Это помогло мне, но, как сказала Нила, это новый UrlHelper(helper.ViewContext.RequestContext) - person Peter; 17.05.2011