Não é possível criar métodos HtmlHelper em VB MVC aplicativo
-
06-07-2019 - |
Pergunta
Eu não consigo descobrir o que eu estou sentindo falta no código a seguir. Eu tenho um método que deve adicionar um (simulado) extensão helper:
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
As minhas view parece com isso:
<%@ 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>
Mas isso me dá o seguinte erro:
'HelpMe' is not a member of 'System.Web.Mvc.HtmlHelper'.
O que estou fazendo de errado?
Solução
Não sei por que a directiva Import Namespace não estava fazendo o truque, mas eu adicionei
<add namespace="MyProject.HtmlHelpers"/>
para a seção <namespaces>
de web.config e está funcionando agora. Talvez se eu tivesse feito
<%@ Import Namespace="MyProject.HtmlHelpers" %>
que teria funcionado tão bem?
Outras dicas
Você já tentou reconstruir sua solução antes de tentar usar o método de extensão? Eu tive que fazer isso com VB.NET para que o compilador para pegar a existência de meus métodos de extensão.
Eu acho que eu encontrei a solução.
módulos de seu ajudante precisa estar em App_Code diretório.
Como gfrizzle disse, acrescentando a referência ao namespace para o web.config nas vistas pasta permite que a página para exibir corretamente. No entanto, eu tive que reiniciar o cliente para obter o IntelliSense para funcionar corretamente. Eu também tive que adicionar explicitamente declarações Import
para namespaces que já foram importados globalmente para o arquivo com o módulo de extensão.
Por exemplo, ao estender System.Web.Mvc.HtmlHelper
eu tive que adicionar a linha
Imports System.Web.Mvc
para que a página para exibição sem erros, apesar do fato de que a aplicação compila corretamente eo namespace está marcada na guia referências do projeto.
O problema pode ser que você tenha instalado tanto MVC2 e MVC3. Se assim for, quando você escreve um HtmlHelper personalizada com VB.NET Visual Studio lance ad erro "YourClass" não é um membro de 'System.Web.Mvc.HtmlHelper'.
Mas se você executar a página trabalha muito bem.
Esta é a solução: http://forums.asp.net/t/1694828.aspx/1
Solução 1) Atualize seu projeto para MVC3 Solução 2) Desinstalar MVC3 Solução 3) quadro Mudança .NET para 3,5 em vez de 4,0 (desativar MVC3) Solução 4) Escrever código em C # e você não terá qualquer problema
Marco