Impossible de créer des méthodes HtmlHelper dans l'application VB MVC
-
06-07-2019 - |
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?
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