Stavo cercando di creare un helper dichiarativo Razor nella mia cartella App_Code per un progetto RTM MVC 3.Utilizzo delle estensioni MVC HtmlHelper dalle viste dichiarative di Razor
Il problema che ho riscontrato è 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 proprietà Html
, di tipo System.Web.WebPages.HtmlHelper
anziché System.Web.Mvc.HtmlHelper
.
Un esempio del tipo di errore mi è stato sempre è:
'System.Web.Mvc.HtmlHelper' non significa contiene una definizione per 'ActionLink' e nessun metodo di estensione 'ActionLink' accettando un primo argomento di tipo 'System.Web.Mvc.HtmlHelper' potrebbe essere trovato (che le manca una direttiva using o un riferimento all'assembly?)
la mia unica soluzione è essere it per creare il mio HelperPage e sostituisce 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; }
}
}
Poi ho dovuto scrivere il seguente nella parte superiore di ogni aiuto:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
E 'destinata ad essere così difficile in MVC 3 o sto facendo qualcosa di sbagliato?
Se è necessario anche l'helper Url, è possibile aggiungere questa riga di codice a HelperPage: UrlHelper Url statico pubblico { get {return new UrlHelper (Html.ViewContext.RequestContext); } } –