Pergunta

Eu criei um controle personalizado simples que apenas herda do Literal Controle e ainda não possui nenhuma extensão, o código está vazio.

Namespace: CustomControls

Nome da classe: literal: system.web.ui.webcontrols.literal

A próxima coisa que faço é registrar esse controle no aspx página como seguinte:

<%@ Register TagPrefix="web" Namespace="CustomControls" %>

(Eu li em poucos tutoriais que essa é uma das maneiras de registrá -lo, além de web.config etc.)

Afinal, não há inteligência para mim e, pior, recebo um erro de análise 'Unknown Server Tag: Web' quando tento executar a página com o controle nela.

Eu usei 'Criar novo projeto' e não um novo site, caso essas informações sejam necessárias.

Qual poderia ser o meu problema?

Desde já, obrigado.

Foi útil?

Solução

Aqui está como eu fiz isso, passo a passo começando do nada. Este primeiro método usa um segundo projeto/montagem. Para a versão app_code role para baixo.

Método do projeto de aplicativo da web

  1. Crie um novo aplicativo da Web ASP.NET. Tome nota do nome, o meu é chamado WebApplication2. Se você já possui um aplicativo da Web existente, o que é provável, clique duas vezes na seção Propriedades do seu projeto e verifique a propriedade "Nome da montagem", anote -o.
  2. Crie uma nova classe no aplicativo da web chamado literal.cs
  3. Coloque em código semelhante ao seguinte para a definição da classe:

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. Adicione a seguinte tag de registro à parte superior da sua página ASPX

    < %@ Register Assembly = "WebApplication2" Namespace = "CustomControls" TagPrefix = "Web" %>

Se o nome da sua montagem foi diferente, mude -o aqui. Percebi que, quando fiz isso no vb.net, o espaço para o nome da WebApplication1.CustomControls, em vez de apenas controlos personalizados, como se estivesse em C#, meio estranho.

  1. Adicione o novo controle à sua página:

    u003Cweb:Literal ID="Literal1" runat="server" Text="test" />

Método separado do projeto

  1. Crie um novo site vazio (asp.net).
  2. Adicione uma nova biblioteca de controle do servidor ASP.NET chamada CustomControls à solução.
  3. Adicione uma nova classe ao novo projeto chamado Literal (estou usando C# para que meu arquivo seja chamado Literal.cs). Abaixo está o meu código super básico, que acredito que deve corresponder ao código descrito na pergunta.

    namespace CustomControls
    {
        public class Literal : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  4. Adicione uma referência ao projeto CustomControls ao seu site.

  5. Adicione o registro da montagem ao topo da sua página ASPX:

    < %@ Register Assembly = "CustomControls" Namespace = "CustomControls" TagPrefix = "Web" %>

  6. Adicione uma nova instância do controle à sua página:

    u003Cweb:Literal ID="Literal1" runat="server" Text="test" />

No método app_code

  1. Crie um novo site vazio (asp.net).
  2. Adicione uma nova classe à pasta App_code literal2 (estou usando C# para que meu arquivo seja chamado Literal2.cs). Abaixo está o meu código super básico, que acredito que deve corresponder ao código descrito na pergunta. Liguei para 2 para que você possa usar isso em conjunto com o método descrito acima sem obter erros de compilação

    namespace CustomControls
    {
        public class Literal2 : System.Web.UI.WebControls.Literal
        {
        }
    }
    
  3. Registre o espaço de montagem/nome para app_code em sua página ASPX, adicionando a seguinte linha ao topo

    < %@ Registro namespace = "CustomControls" Assembly = "__ Code" TagPrefix = "Web" %>

  4. Adicione uma instância do novo controle à sua página:

    u003Cweb:Literal2 ID="literal2" runat="server" Text="test2" />

Eu testei isso usando o Visual Studio e tudo funcionou bem para mim.

Outras dicas

Você também pode registrar seu controle no web.config se quiser usá -lo em outras páginas

<pages>
        <controls>
          <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add tagPrefix="web" namespace="MyProject.CustomControls" assembly="MyProject" />
        </controls>
      </pages>

Para o site, isso funcionará

<add tagPrefix ="web" namespace="ASP.App_Code.CustomControls" />

O problema está em seu <%@ Register TagPrefix="web" Namespace="CustomControls" %> Tag: perde o nome da assembléia!

Deve se tornar <%@ Register TagPrefix="web" Namespace="CustomControls" Assembly="YourAssemblyName" %>. Se você tiver dificuldades em encontrar o nome da assembléia para sua aula, aqui estão algumas dicas:

  1. Se você criou a classe dentro do projeto Visual Studio do aplicativo da web, ou em um projeto DLL (Biblioteca Compartilhada) separada, clique com o botão direito do mouse no projeto e vá para propriedades para obter o nome da montagem
  2. Se você criou o arquivo .cs no diretório app_code, ASP.App_Code Deveria trabalhar

Caso contrário, forneça algumas informações sobre o layout do projeto!

A coisa mais fácil a fazer é arrastar e soltar o literal.ascx para a página (se a página estiver na mesma solução) .Se a página for outra solução, você poderá adicionar o controle à caixa de ferramentas VS e arrastar e- -Drop o controle na página.

Você esqueceu o atributo SRC.

<%@ Register TagPrefix="web" Namespace="CustomControls" Src="PathToYourCustomControl" %> 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top