No se pueden crear métodos HtmlHelper en la aplicación VB MVC
-
06-07-2019 - |
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?
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