Stavo cercando di creare un helper dichiarativo Razor nella mia cartella App_Code per un progetto MVC 3 RTM.
Il problema che ho riscontrato è stato che le estensioni MVC HtmlHelper, come ActionLink, non sono disponibili. Questo perché gli helper compilati derivano da System.Web.WebPages.HelperPage
e sebbene esponga una Html
proprietà, è di tipo System.Web.WebPages.HtmlHelper
piuttosto che System.Web.Mvc.HtmlHelper
.
Un esempio del tipo di errore che stavo ricevendo è:
"System.Web.Mvc.HtmlHelper" non contiene una definizione per "ActionLink" e nessun metodo di estensione "ActionLink" che accetta un primo argomento di tipo "System.Web.Mvc.HtmlHelper" potrebbe essere trovato (manca una direttiva using o un riferimento all'assembly?)
La mia unica soluzione è stata creare la mia HelperPage e sovrascrivere la proprietà 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; }
}
}
Devo quindi scrivere quanto segue all'inizio di ogni helper:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Dovrebbe essere così difficile in MVC 3 o sto facendo qualcosa di sbagliato?