Question

Je n'arrive pas à comprendre ce qui me manque dans le code suivant. J'ai une méthode qui devrait ajouter une extension d'aide (fictive):

Imports System.Runtime.CompilerServices

Namespace HtmlHelpers

    Public Module HelpExtensions

        <Extension()> _
        Public Function HelpMe(ByVal HtmlHelper As HtmlHelper) As String
            Return "<a>HELP</a>"
        End Function

    End Module

End Namespace

Mon vue ressemble à ceci:

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<%@ Import Namespace="HtmlHelpers" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="body" runat="server">
    <%=Html.HelpMe()%>
</asp:Content>

Mais cela me donne l'erreur suivante:

'HelpMe' is not a member of 'System.Web.Mvc.HtmlHelper'.

Qu'est-ce que je fais de travers?

Était-ce utile?

La solution

Je ne sais pas pourquoi la directive Import Namespace ne fait pas l'affaire, mais j'ai ajouté

<add namespace="MyProject.HtmlHelpers"/>

dans la section <namespaces> de web.config et cela fonctionne maintenant. Peut-être que si j'avais fait

<%@ Import Namespace="MyProject.HtmlHelpers" %>

cela aurait aussi bien fonctionné?

Autres conseils

Avez-vous essayé de reconstruire votre solution avant d'utiliser la méthode d'extension? J'ai eu à le faire avec VB.NET pour que le compilateur puisse constater l'existence de mes méthodes d'extension.

Je suppose que je viens de trouver la solution.

Les modules de votre assistant DOIVENT figurer dans le répertoire App_Code .

Comme l'a dit gfrizzle, l'ajout de la référence d'espace de nom au fichier web.config dans le dossier Vues permet à la page de s'afficher correctement. Cependant, j'ai dû redémarrer le client pour que Intellisense fonctionne correctement. Je devais aussi explicitement ajouter Import des instructions pour les espaces de noms déjà importés globalement dans le fichier avec le module d'extension.

Par exemple, lors de l'extension System.Web.Mvc.HtmlHelper, je devais ajouter la ligne

Imports System.Web.Mvc

pour que la page s'affiche sans erreur, malgré le fait que l'application se compile correctement et que l'espace de nom soit vérifié dans l'onglet Références du projet.

Le problème peut être que vous avez installé à la fois MVC2 et MVC3. Si tel est le cas, lorsque vous écrivez un HTMLHelper Custom avec VB.NET Visual Studio, indiquez une erreur & "YourClass &"; n'est pas membre de 'System.Web.Mvc.HtmlHelper'.

Mais si vous exécutez la page, cela fonctionne bien.

Voici la solution: http://forums.asp.net/t/1694828.aspx/1

Solution 1) Mettez à niveau votre projet vers MVC3 Solution 2) Désinstallez MVC3 Solution 3) Changez le framework .NET en 3.5 au lieu de 4.0 (désactivez MVC3) Solution 4) Écrivez le code en C # et vous n’aurez aucun problème

Marco

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top