Заполните @Url Helper в объявлении @helper - PullRequest
3 голосов
/ 02 августа 2011

Есть ли способ получить доступ к полному вспомогательному объекту @Url в объявлении @helper?

Я хочу сделать что-то вроде этого ...

@helper Button(System.Web.Mvc.ActionResult action, string text)
{
    <input type="button" name="btn" value="@text" onclick="windows.location='@Url.Action(action)'" />
}

Я нашел этот вопрос но это решение не дает вам доступа к @Url.Action(ActionResult). Обратите внимание на конкретную перегрузку, которую я ищу.

Так, кто-нибудь нашел решение для этого? Я всегда мог сделать стиль метода расширения для пользовательских помощников, но мне нравится стиль @helper, и я уже сталкивался с этой проблемой несколько раз.

Спасибо всем заранее!

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

Есть ли способ получить доступ к полному вспомогательному объекту @Url внутри объявления @helper?

Да, передав его в качестве аргумента вспомогательному методу.

@helper Button(string action, string text, UrlHelper url)
{
    <input type="button" name="btn" value="@text" onclick="windows.location='@url.Action(action)'" />
}

и когда вы вызываете помощника из какого-либо вида:

@Button("someAction", "some text", Url)
0 голосов
/ 02 августа 2011

Я не уверен насчет Бритвы, но для помощников HTML Да, вы можете. используя RequestContext помощника, как показано ниже. Вот один пример, который я написал для помощника ImageFor HTML:

    public static HtmlString ImageFor(this HtmlHelper helper, string url ) 
    {
        var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        TagBuilder tb = new TagBuilder("img");
        tb.MergeAttribute("src", urlHelper.Content(url));
        return new HtmlString(tb.ToString(TagRenderMode.SelfClosing)); 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...