Пользовательские помощники HTML в методах расширения Razor и HTML - PullRequest
2 голосов
/ 07 апреля 2011

Есть много вопросов, здесь и везде, относительно невозможности использования методов расширения HtmlHelper (например, ActionLink) в методе @helper (razor). Прямо сейчас, в моем проекте, я решил проблему, передавая в качестве дополнительного параметра текущую страницу (System.Web.Mvc.WebViewPage page) в @helper, как в

@helper HelperFunction(SampleParameter sp, System.Web.Mvc.WebViewPage page)

и его использование (тривиально), как в

{
    ...
    @page.Html.ActionLink("Title", "Action")
    ...
}

Я бы хотел знать, не слишком ли это глупо :-) и почему. Конечно, было бы лучше иметь прямой доступ к текущему HtmlHelper страницы, где вызывается @helper, но, в любом случае ... если это хорошее решение ...

Andrea

1 Ответ

1 голос
/ 02 мая 2011

Мне было любопытно, почему это не сработало, поэтому я немного посмотрел.

Когда вы помещаете код в папку App_Code, он наследуется от System.Web.WebPages.HelperPage, и хотя у него есть свойство Html, это System.Web.WebPages.HtmlHelper, а не System.Web.Mc.HtmlHelper, поэтому вы не можете найти на нем такие вещи, как ActionLink: (

Я быстро осмотрелся, и нашел ответ от ЭндрюМедсестра :

Здесь Омар получил правильный ответ, но я хотел кое-что добавить (не стесняйтесь отмечать ответ Омара как ответ).

Мы знали оэто в v1 и не удалось получить отличное решение в продукте, но Дэвид Эббо (архитектор из команды ASP.Net) опубликовал образец генератора кода Visual Studio, который в основном является первым исследованием идеймы пытаемся сделать эту работу правильно: http://blogs.msdn.com/b/davidebb/archive/2010/10/27/turn-your-razor-helpers-into-reusable-libraries.aspx

Попробуйте и посмотрите, что вы думаете! Сообщите Дэвиду, если у вас есть комментарии, разместив его в своем блоге.

К сожалению, похоже, что вы не можете даже поставить Helper ouсторона App_Code в вашем классе Layout или _ViewStart: (

...