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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top