Impossibile creare metodi HtmlHelper nell'app VB MVC
-
06-07-2019 - |
Domanda
Non riesco a capire cosa mi manca nel seguente codice. Ho un metodo che dovrebbe aggiungere un'estensione helper (fittizia):
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
La mia vista è simile al seguente:
<%@ 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>
Ma questo mi dà il seguente errore:
'HelpMe' is not a member of 'System.Web.Mvc.HtmlHelper'.
Cosa sto sbagliando?
Soluzione
Non sono sicuro del motivo per cui la direttiva Import Namespace non funzionasse, ma ho aggiunto
<add namespace="MyProject.HtmlHelpers"/>
nella sezione <namespaces>
di web.config e ora funziona. Forse se l'avessi fatto
<%@ Import Namespace="MyProject.HtmlHelpers" %>
avrebbe funzionato pure?
Altri suggerimenti
Hai provato a ricostruire la tua soluzione prima di provare a utilizzare il metodo di estensione? Ho dovuto farlo con VB.NET per consentire al compilatore di rilevare l'esistenza dei miei metodi di estensione.
Suppongo di aver appena trovato la soluzione.
I moduli dell'helper DEVONO ESSERE nella directory App_Code .
Come ha detto gfrizzle, l'aggiunta del riferimento allo spazio dei nomi a web.config nella cartella Views consente di visualizzare correttamente la pagina. Tuttavia, ho dovuto riavviare il client per far funzionare correttamente Intellisense. Ho anche dovuto aggiungere esplicitamente Import
istruzioni per spazi dei nomi che erano già state importate globalmente nel file con il modulo di estensione.
Ad esempio, durante l'estensione System.Web.Mvc.HtmlHelper
ho dovuto aggiungere la linea
Imports System.Web.Mvc
affinché la pagina venga visualizzata senza errori, nonostante il fatto che l'applicazione venga compilata correttamente e lo spazio dei nomi sia verificato nella scheda riferimenti del progetto.
Il problema potrebbe essere che hai installato sia MVC2 che MVC3. In tal caso, quando scrivi un HTMLHelper personalizzato con VB.NET Visual Studio genera un errore & Quot; YourClass & Quot; non è un membro di "System.Web.Mvc.HtmlHelper".
Ma se esegui la pagina funziona bene.
Questa è la soluzione: http://forums.asp.net/t/1694828.aspx/1
Soluzione 1) Aggiorna il tuo progetto a MVC3 Soluzione 2) Disinstallare MVC3 Soluzione 3) Cambia .NET framework in 3.5 anziché 4.0 (disabilita MVC3) Soluzione 4) Scrivi il codice in C # e non avrai problemi
Marco