Intenté crear un asistente declarativo Razor en mi carpeta App_Code para un proyecto MVC 3 RTM.
El problema con el que me encontré fue que las extensiones MVC HtmlHelper, como ActionLink, no están disponibles. Esto se debe a que los ayudantes compilados se derivan System.Web.WebPages.HelperPage
, y aunque exponen una Html
propiedad, es de tipo en System.Web.WebPages.HtmlHelper
lugar de System.Web.Mvc.HtmlHelper
.
Un ejemplo del tipo de error que estaba recibiendo es:
'System.Web.Mvc.HtmlHelper' no contiene una definición para 'ActionLink' y no se puede encontrar ningún método de extensión 'ActionLink' que acepte un primer argumento de tipo 'System.Web.Mvc.HtmlHelper' (falta una directiva de uso o una referencia de ensamblaje?)
Mi única solución ha sido crear mi propio HelperPage y anular la propiedad 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; }
}
}
Luego tengo que escribir lo siguiente en la parte superior de cada ayudante:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
¿Está destinado a ser tan difícil en MVC 3, o estoy haciendo algo mal?