J'essayais de créer un assistant déclaratif Razor dans mon dossier App_Code pour un projet MVC 3 RTM.
Le problème que j'ai rencontré était que les extensions MVC HtmlHelper, comme ActionLink, ne sont pas disponibles. C'est parce que les helpers compilés dérivent de System.Web.WebPages.HelperPage
, et bien qu'il expose une Html
propriété, son de type System.Web.WebPages.HtmlHelper
plutôt que System.Web.Mvc.HtmlHelper
.
Un exemple du type d'erreur que j'obtenais est:
'System.Web.Mvc.HtmlHelper' ne contient pas de définition pour 'ActionLink' et aucune méthode d'extension 'ActionLink' acceptant un premier argument de type 'System.Web.Mvc.HtmlHelper' n'a pu être trouvée (il vous manque une directive using ou une référence d'assemblage?)
Ma seule solution a été de créer ma propre HelperPage et de remplacer la propriété 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; }
}
}
Je dois ensuite écrire ce qui suit en haut de chaque aide:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Est-ce censé être aussi difficile dans MVC 3, ou est-ce que je fais quelque chose de mal?