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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top