Pregunta

No puedo entender lo que me falta en el siguiente código. Tengo un método que debería agregar una extensión auxiliar (ficticia):

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

Mi vista se ve así:

<%@ 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>

Pero esto me da el siguiente error:

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

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

No estoy seguro de por qué la directiva Importar espacio de nombres no estaba funcionando, pero agregué

<add namespace="MyProject.HtmlHelpers"/>

a la sección <namespaces> de web.config y está funcionando ahora. Tal vez si lo hubiera hecho

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

¿habría funcionado también?

Otros consejos

¿Has intentado reconstruir tu solución antes de intentar usar el método de extensión? Tuve que hacer eso con VB.NET para que el compilador descubriera la existencia de mis métodos de extensión.

Creo que acabo de encontrar la solución.

LOS módulos de su ayudante DEBEN ESTAR en el directorio App_Code .

Como dijo gfrizzle, agregar la referencia del espacio de nombres a web.config en la carpeta Vistas permite que la página se muestre correctamente. Sin embargo, tuve que reiniciar el cliente para que Intellisense funcionara correctamente. También tuve que agregar explícitamente Import declaraciones para espacios de nombres que ya se habían importado globalmente al archivo con el módulo de extensión.

Por ejemplo, al extender System.Web.Mvc.HtmlHelper tuve que agregar la línea

Imports System.Web.Mvc

para que la página se muestre sin error, a pesar de que la aplicación se compila correctamente y el espacio de nombres está marcado en la pestaña de referencias del proyecto.

El problema podría ser que haya instalado MVC2 y MVC3. Si es así, cuando escribe un HTMLHelper Custom con VB.NET Visual Studio, arroje un error de anuncio & Quot; YourClass & Quot; no es miembro de 'System.Web.Mvc.HtmlHelper'.

Pero si ejecuta la página, funciona bien.

Esta es la solución: http://forums.asp.net/t/1694828.aspx/1

Solución 1) Actualice su proyecto a MVC3 Solución 2) Desinstale MVC3 Solución 3) Cambie .NET framework a 3.5 en lugar de 4.0 (deshabilite MVC3) Solución 4) Escriba el código en C # y no tendrá ningún problema

Marco

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top