Я пытался создать декларативный помощник Razor в папке App_Code для проекта RTM MVC 3.
Проблема, с которой я столкнулся, заключалась в том, что расширения MVC HtmlHelper, такие как ActionLink, недоступны. Это связано с тем, что скомпилированные помощники происходят из System.Web.WebPages.HelperPage, и хотя он предоставляет свойство Html, его тип System.Web.WebPages.HtmlHelper, а не System.Web.Mvc.HtmlHelper.
Примером ошибки, которую я получал, является:
'System.Web.Mvc.HtmlHelper' не содержат определение "ActionLink" и никакой метод расширения 'ActionLink' Принимая первый аргумент типа "System.Web.Mvc.HtmlHelper" может быть найдено (вам не хватает директива или ссылка на сборку?)
Моим единственным решением было создать мою собственную HelperPage и переопределить свойство Html:
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage 
{
    // Workaround - exposes the MVC HtmlHelper instead of the normal helper
    public static new HtmlHelper Html
    {
        get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
    }
}
Затем мне нужно написать следующее в верхней части каждого помощника:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
    @Html.ActionLink("Index", "Home")
}
Это значит, что это сложно в MVC 3, или я делаю что-то неправильно?
