Ich habe versucht, einen deklarativen Razor-Helfer in meinem App_Code-Ordner für ein MVC 3 RTM-Projekt zu erstellen.
Das Problem, auf das ich gestoßen bin, war, dass die MVC HtmlHelper-Erweiterungen wie ActionLink nicht verfügbar sind. Dies liegt daran, dass die kompilierten Helfer von System.Web.WebPages.HelperPage
einer Html
Eigenschaft abgeleitet sind und diese verfügbar machen, obwohl sie System.Web.WebPages.HtmlHelper
eher vom Typ als vom Typ ist System.Web.Mvc.HtmlHelper
.
Ein Beispiel für die Art von Fehler, die ich bekam, ist:
'System.Web.Mvc.HtmlHelper' enthält keine Definition für 'ActionLink' und es konnte keine Erweiterungsmethode 'ActionLink' gefunden werden, die ein erstes Argument vom Typ 'System.Web.Mvc.HtmlHelper' akzeptiert (fehlt Ihnen eine using-Direktive) oder eine Montagereferenz?)
Meine einzige Lösung bestand darin, meine eigene HelperPage zu erstellen und die HTML-Eigenschaft zu überschreiben:
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; }
}
}
Ich muss dann oben auf jeden Helfer folgendes schreiben:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Soll es in MVC 3 so schwer sein, oder mache ich etwas falsch?