En utilisant MVC HtmlHelper extensions de Rasoir déclarative vues

J'ai essayé de créer un Rasoir déclarative aide dans mon dossier App_Code pour un MVC 3 RTM projet.

Le problème que j'ai rencontré était que le MVC HtmlHelper extensions, comme ActionLink, ne sont pas disponibles. C'est parce que la compilation des aides de dériver de System.Web.WebPages.HelperPage, et même s'il expose une Html de la propriété, de son de type System.Web.WebPages.HtmlHelper plutôt que System.Web.Mvc.HtmlHelper.

Un exemple du genre d'erreur que je recevais est:

'Système.Web.Mvc.HtmlHelper " n'
contiennent une définition pour 'ActionLink'
et aucune méthode d'extension 'ActionLink'
acceptant un premier argument de type
'Système.Web.Mvc.HtmlHelper " pourrait être
trouvé (êtes-vous en manque un à l'aide
la directive ou une référence d'assembly?)

Ma seule solution a été de créer mon propre HelperPage et remplacer le code Html de la propriété:

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; }
    }
}

J'ai ensuite écrire le code suivant en haut de chaque helper:

@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html

@helper DoSomething()
{
    @Html.ActionLink("Index", "Home")
}

Est-il destiné à être ce dur dans MVC 3, ou suis-je en train de faire quelque chose de mal?

  • Si vous avez besoin également l'Url helper vous culd ajouter cette ligne de code pour HelperPage: public static UrlHelper Url { get { return new UrlHelper(Html.ViewContext.RequestContext); } }
InformationsquelleAutor Paul Stovell | 2011-01-17