Próbowałem utworzyć deklaratywnego pomocnika Razor w moim folderze App_Code dla projektu MVC 3 RTM.
Problem polegał na tym, że rozszerzenia MVC HtmlHelper, takie jak ActionLink, nie są dostępne. Dzieje się tak, ponieważ skompilowane elementy pomocnicze wywodzą się z właściwości System.Web.WebPages.HelperPage
i chociaż ujawniają ją Html
, to System.Web.WebPages.HtmlHelper
raczej jej typ niż System.Web.Mvc.HtmlHelper
.
Przykład rodzaju błędu, który otrzymuję, to:
„System.Web.Mvc.HtmlHelper” nie zawiera definicji „ActionLink” i nie można znaleźć metody rozszerzenia „ActionLink” akceptującej pierwszy argument typu „System.Web.Mvc.HtmlHelper” (czy brakuje dyrektywy using lub odniesienie do zespołu?)
Moim jedynym rozwiązaniem było utworzenie własnej strony HelperPage i zastąpienie właściwości 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; }
}
}
Następnie na górze każdego pomocnika muszę napisać:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Czy to ma być takie trudne w MVC 3, czy robię coś źle?