J'essayais de créer une aide déclarative Razor dans mon dossier App_Code pour un projet MVC 3 RTM.
Le problème que j'ai rencontré est que les extensions MVC HtmlHelper, comme ActionLink, ne sont pas disponibles. Ceci est dû au fait que les aides compilées dérivent de System.Web.WebPages.HelperPage
et bien qu'il expose une Html
sa propriété de type System.Web.WebPages.HtmlHelper
plutôt que System.Web.Mvc.HtmlHelper
.
Voici un exemple du type d'erreur que je recevais :
System.Web.Mvc.HtmlHelper" ne contient pas 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é (il vous manque une directive 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 au début 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 que c'est censé être aussi difficile dans MVC 3, ou est-ce que je fais quelque chose de mal ?