Visão geral sobre controles de usuário ASP.NET

Às vezes, talvez seja necessário funcionalidade em um controle que não é fornecido pelos controles internos de servidor Web do ASP.NET.Nesses casos, você pode criar seus próprios controles.Você tem duas opções.Você pode criar:

  • Controles de usuário.Os controles do usuário são recipientes no qual você pode colocar marcação e os controles do servidor Web.Você pode depois tratar o controle de usuário como uma unidade e definir propriedades e métodos para ele.

  • Controles personalizados.Um controle personalizado é uma classe que você escreve que é derivada de Control ou WebControl.

Os controles do usuário são mais fáceis para criar controles personalizados, que substancialmente porque você pode reutilizar em controles existentes.Eles tornam mais fácil criar controles com elementos da interface de usuário complexos.

Este tópico fornece uma visão geral sobre trabalhar com controles de usuário ASP.NET.

Estrutura do controle de usuário

Um controle de usuário da Web ASP.NET é semelhante para uma página completa da Web do ASP.NET (arquivo.aspx), com páginas de interface de usuário e código.Crie o controle de usuário da mesma forma que se cria uma página ASP.NET e seguida, adicione as marcações e os controles filhos que você precisar.Um controle de usuário pode incluir código para manipular seu conteúdo como um pode uma página, incluindo executar tarefas como vinculação de dados.

Um controle de usuário difere de uma página da Web do ASP.NET dessas formas:

  • A extensão de nome de arquivo para o controle de usuário é.ascx.

  • Em vez de uma diretiva @ Page, o controle de usuário contém uma diretiva @ Controle que define a configuração e outras propriedades.

  • Os controles do usuário não podem executar como arquivos autônomos.Em vez disso, você deve adicioná-los às páginas ASP.NET, como você faria em qualquer controle.

  • O controle de usuário não contém elementos html, body, ou form nela.Esses elementos devem estar na página de hospedagem.

Você pode usar os mesmos elementos HTML (exceto os elementos html, body, ou form) e controles Web em um controle de usuário que você fizer em um página da Web ASP.NET.Por exemplo, se você estiver criando um controle de usuário para usar como uma barra de ferramentas, você pode colocar uma série de controles de servidor Web Button até o controle e criar manipuladores de eventos para os botões.

O exemplo a seguir mostra um controle de usuário que implementa um controle giratório onde os usuários podem clicar acima e abaixo dos botões para girar por uma série de opções em uma caixa de texto.

Observação de segurança:

Este exemplo tem uma caixa de texto que aceita entrada do usuário, que é uma ameaça potencial de segurança.Por padrão, páginas Web ASP.NET validam se as entradas de usuário não incluem scripts ou elementos HTML.Para obter mais informações, consulte Visão Geral de Scripts Maliciosos.

<%@ Control Language="VB" ClassName="UserControl1" %>
<script >
    Protected colors As String() = {"Red", "Green", "Blue", "Yellow"}
    Protected currentColorIndex As Integer = 0
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If IsPostBack Then
            currentColorIndex = CInt(ViewState("currentColorIndex"))
        Else
            currentColorIndex = 0
            DisplayColor()
        End If
    End Sub
    
    Protected Sub DisplayColor()
        textColor.Text = colors(currentColorIndex)
        ViewState("currentColorIndex") = currentColorIndex.ToString()
    End Sub

    Protected Sub buttonUp_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If currentColorIndex = 0 Then
            currentColorIndex = colors.Length - 1
        Else
            currentColorIndex -= 1
        End If
        DisplayColor()
    End Sub
    
    Protected Sub buttonDown_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If currentColorIndex = colors.Length - 1 Then
            currentColorIndex = 0
        Else
            currentColorIndex += 1
        End If
        DisplayColor()
    End Sub
</script>
<asp:TextBox ID="textColor"  
    ReadOnly="True" />
<asp:Button Font-Bold="True" ID="buttonUp"   
    Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown"  
    Text="v" OnClick="buttonDown_Click" />
<% @ Control Language="C#" ClassName="UserControl1" %>
<script >
    protected int currentColorIndex;
    protected String[] colors = {"Red", "Blue", "Green", "Yellow"};
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            currentColorIndex = 
                Int16.Parse(ViewState["currentColorIndex"].ToString());
        }
        else
        {
            currentColorIndex = 0;
            DisplayColor();
        }
    }
    
    protected void DisplayColor()
    {
        textColor.Text = colors[currentColorIndex];
        ViewState["currentColorIndex"] = currentColorIndex.ToString();
    }
    
    protected void buttonUp_Click(object sender, EventArgs e)
    {
        if(currentColorIndex == 0)
        {
            currentColorIndex = colors.Length - 1;
        }
        else
        {
            currentColorIndex -= 1;
        }
        DisplayColor();
    }

    protected void buttonDown_Click(object sender, EventArgs e)
    {
        if(currentColorIndex == (colors.Length - 1))
        {
            currentColorIndex = 0;
        }    
        else
        {
            currentColorIndex += 1;
        }
        DisplayColor();
    }
</script>
<asp:TextBox ID="textColor"  
    ReadOnly="True" />
<asp:Button Font-Bold="True" ID="buttonUp"  
    Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown"  
    Text="v" OnClick="buttonDown_Click" />

Observe que o controle de usuário parece muito, como um página ASP.NET — ela contém vários controles (um controle TextBox e dois controles Button) e código que alças os eventos de botões Click e a página do Load evento.However, the control contains no markup except for the controls, and instead of an @ Page directive it contains an @ Controle directive.

Adicionar um controle de usuário à uma página

Você pode adicionar um controle de usuário à uma página, registrando-o na página host.Quando você registrá-lo, especifique o arquivo.ascx que contém o controle de usuário, um prefixo de marca e um nome de marca que você usará para declarar o controle de usuário na página.Para obter detalhes, consulte:Como: Incluir um controle de usuário em uma página da Web do ASP.NET.

Definindo propriedades e métodos para um controle do usuário

Você pode definir propriedades e métodos para um controle de usuário da mesma maneira que você faz para uma página.Ao definir uma propriedade para um controle de usuário que tornam possível definir suas propriedades declarativamente e no código.

Eventos em controles de usuário

Quando um controle de usuário contém controles de servidor Web, você pode escrever código no controle de usuário para manipular os eventos gerados pelos controles filhos.Por exemplo, se seu controle de usuário contém um controle Button, você pode criar um manipulador no controle de usuário para o botão do evento Click.

Eventos gerados por controles filho em um controle de usuário padrão, não estão disponíveis para a página host.Entretanto, você pode definir eventos para seu controle de usuário e gerá-los para que a página host seja notificada do evento.Faça isso da mesma maneira que você define eventos para qualquer classe.Para obter mais informações, consulte Gerando um evento.

Referenciando recursos externos

Quando um controle de usuário é executado, referências a recursos externos, como imagens ou âncoras para outras páginas são resolvidas usando a URL do controle de usuário como a URL base.Por exemplo, se o controle de usuário contém um controle Image cuja propriedade ImageUrl é definida como Images/Button1.gif, a URL da imagem será adicionada à URL do controle de usuário para resolver o caminho completo para a imagem.Se o controle de usuário referencia um recurso que não esteja em uma subpasta do controle de usuário propriamente dita, você deve fornecer um caminho que resolve a pasta correta em tempo de execução.Para obter mais informações sobre como especificar caminhos para controles de servidor ASP.NET, consulte Caminhos de Site Web do ASP.NET.

Caching e controles de usuário

Controles de usuário podem oferecer suporte a cache de diretivas que são separadas da página host.Portanto, você pode adicionar controles de usuário para páginas e para cache de partes de uma página.Para obter detalhes, consulte:Cache de Partes de uma Página ASP.NET.

Consulte também

Outros recursos

Controles de usuário do ASP.NET