Eu estava tentando criar um auxiliar declarativo Razor na minha pasta App_Code para um projeto MVC 3 RTM.
O problema que encontrei foi que as extensões MVC HtmlHelper, como o ActionLink, não estão disponíveis. Isso ocorre porque os auxiliares compilados derivam System.Web.WebPages.HelperPage
e, embora exponha uma Html
propriedade, é do tipo System.Web.WebPages.HtmlHelper
e não System.Web.Mvc.HtmlHelper
.
Um exemplo do tipo de erro que eu estava recebendo é:
'System.Web.Mvc.HtmlHelper' não contém uma definição para 'ActionLink' e nenhum método de extensão 'ActionLink' que aceita um primeiro argumento do tipo 'System.Web.Mvc.HtmlHelper' pode ser encontrado (você está perdendo uma diretiva de uso ou uma referência de montagem?)
Minha única solução foi criar meu próprio HelperPage e substituir a propriedade 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; }
}
}
Eu tenho que escrever o seguinte no topo de todo ajudante:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
É para ser tão difícil no MVC 3, ou estou fazendo algo errado?