Trabalhando com Web User Controls

by Felipe Oriani 5. August 2009 15:25

Olá Pessoal, como estão ? Hoje vou falar um pouco sobre Web User Controls e como utiliza-los em uma aplicação ASP.Net.

Um web user control é um recurso do ASP.Net que nos permite de forma fácil centralizar um bloco de código ou funcionalidade em nossas aplicações web, buscando deixar a aplicação com uma manutenção fácil, flexível de forma a evitar a replicação de código. Para ilustrar um exemplo, vamos tomar como base um pequeno formulário onde irá conter alguns campos, propriedades  e eventos definidos em nosso controle.

Crie um website no Visual Studio (2005 ou 2008) e no solution explorer adicione um novo item do tipo Web User Control e chame-o de "FormBase.ascx", conforme a imagem 1.

 

Imagem 1: Adicionando webusercontrol na aplicação

 

Em seguida, digite o código da listagem 1 no arquivo .ascx de nosso web user control para fazer um formulário simples de cadastro:

 

<table width="400">

    <tr>

        <td>Nome: </td>

        <td><asp:TextBox ID="txtNome" runat="server"

            MaxLength="60" Columns="30"></asp:TextBox></td>

    </tr>

    <tr>

        <td>CPF: </td>

        <td><asp:TextBox ID="txtCPF" runat="server"

             MaxLength="14" Columns="14"></asp:TextBox></td>

    </tr>

    <tr>

        <td>Email: </td>

        <td><asp:TextBox ID="txtEmail" runat="server"

             MaxLength="60" Columns="30"></asp:TextBox></td>

    </tr>

    <tr>

        <td>Senha: </td>

        <td><asp:TextBox ID="txtSenha" runat="server"

            MaxLength="20" Columns="20" TextMode="Password"></asp:TextBox></td>

    </tr>

    <tr id="trNews" runat="server">

        <td colspan="2"><asp:CheckBox ID="chkNews" runat="server"

                        Text="Desejo receber newsletters!" Checked="true" /></td>

    </tr>

    <tr id="trSalvar" runat="server">

        <td colspan="2" align="right"><asp:Button ID="btnEnviar" runat="server"

                                      Text="Salvar" onclick="btnEnviar_Click" /></td>

    </tr>

</table>

Listagem 1: Código fonte do arquivo .ascx de nosso web user control de exemplo

 

Repare que colocamos alguns campos no formulário de exemplo e nas duas últimas linhas desta tabela definimos um Id, pois vamos precisar destes para definirmos algumas propriedades que serão utilizadas no exemplo. De um duplo clique no botão Salvar que está presente na última linha do controle para criar um evento para este. Veja agora na listagem 2, o code behine (arquivo .cs) deste exemplo com os comentários explicando o por que de cada item no controle.


    /// <summary>

    /// Propriedade que defini se a linha de newsletters irá aparecer ou não!

    /// </summary>

    public bool ShowNewsLetter

    {

        get { return trNews.Visible; }

        set { trNews.Visible = value; }

    }

 

    /// <summary>

    /// propriedade que define o valor do campo nome!

    /// </summary>

    public string Nome

    {

        get { return txtNome.Text; }

        set { txtNome.Text = value; }

    }

 

    /// <summary>

    /// Propriedade que defini o valor do CPF

    /// </summary>

    public string CPF

    {

        get { return txtCPF.Text; }

        set { txtCPF.Text = value; }

    }

 

    /// <summary>

    /// Propriedade que defini o valor do campo email!

    /// </summary>

    public string Email

    {

        get { return txtEmail.Text; }

        set { txtEmail.Text = value; }

    }

 

    /// <summary>

    /// Propriedade que defini o valor do campo senha!

    /// </summary>

    public string Senha

    {

        get { return txtSenha.Text; }

    }

 

    /// <summary>

    /// Propriedade que defini o valor do campo newsletters!

    /// </summary>

    public bool ReceberNews

    {

        get { return chkNews.Checked; }

        set { chkNews.Checked = value; }

    }

 

    /// <summary>

    /// Exibição da linha que mostra o botão de salvar

    /// </summary>

    public bool ShowSalvar

    {

        get { return trSalvar.Visible; }

        set { trSalvar.Visible = value; }

    }

 

    /// <summary>

    /// Método que limpa o formulário

    /// </summary>

    public void LimparFormulario()

    {

        txtNome.Text = string.Empty;

        txtCPF.Text = string.Empty;

        txtEmail.Text = string.Empty;

        chkNews.Checked = true;       

    }

 

    protected void btnEnviar_Click(object sender, EventArgs e)

    {

        //caso o evento seja diferente de nulo, ele foi implementado,

        if (Salvar != null)

            //executando o evento..

            Salvar(sender, e);

    }

 

    //declara um evento para ser implementado no controle...

    public event EventHandler Salvar;

 

Listagem 2: Code behine comentado de nosso web user control de exemplo.

 

Tendo este controle definido, já podemos utilizá-lo em nossa aplicação. Abra um webform presente no solution explorer e em modo Design, arraste o web user control FormBase.ascx para o webform, e veja que o visual studio já nos fornece uma visão sobre este controle. Se você clicar sobre o controle e olhar na janela de propriedades verá que temos todas as propriedades que definimos  em nosso controle. Veja a figura 2:


Imagem 2: Janela de propridades de nosso web user control.

<!--[if !vml]--><!--[endif]-->


Agora em nosso controle presente no webform, defina a propriedade ShowNewsLetter para "True" para exibirmos o campo de newsletters, e defina ShowSalvar, para não exibir a linha que contém o botão salvar. De um duplo clique na página e veja que é possível acessar o método "LimparFormulario()" que também está definido no controle. Veja a figura 3.

 

 

 

Imagem 3: Acessando método do web user control.

 

Outro recurso interessante são os eventos aplicados em nosso controle; para exemplificar um evento customizado em nosso controle, veja a imagem 4. Ela ilustra o código em nosso webform, implementando o evento que definimos como "Salvar" em nosso controle. Da mesma forma que o evento "Click" de um button é executado, o nosso evento Salvar, será executado quando acontecer o click de nosso botão Salvar for executado, pois aplicamos desta forma. Você poderia implementar outros eventos, como por exemplo o evento Checked de um Checkbox (com AutoPostBack=True), ou um SelectedIndexChanged de um IListControl (DropDownList, ListBox, CheckBoxList, RabioListButton, etc...), entre outras formas de se aplicar eventos.


Imagem 4: Code behine de nosso web form utilizando o web user control de exemplo

 

E por fim, a listagem 3, mostra como ficaria nosso webform utilizando nosso controle.

 

<%@ Page Language="C#" AutoEventWireup="true" 

     CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register src="FormBase.ascx" tagname="FormBase" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <uc1:FormBase ID="FormBase1" runat="server"

                  ShowNewsLetter="True"

                  ShowSalvar="False"

                  OnSalvar="FormBase1_OnSalvar" />

    </form>

</body>

</html>

Listagem 3: Webform utilizando web user control.

Conclusão:

Vimos como é fácil desenvolver e utilizar web user controls com propriedades, métodos e eventos em nossas aplicações, e através destas constrains (métodos, propriedades, eventos) podemos desenvolver controles com funcionalidades bem flexíveis, impedindo a replicação de código desnecessário e mantendo uma manutenção fácil e objetiva.


Bem pessoal, demonstrei de forma rápida e fácil de como desenvolver e utilizar web user controls.
Espero que um dia ajude alguém. Um abraço e até a próxima.

 

Referências:

http://msdn.microsoft.com/en-us/library/fb3w5b53(VS.71).aspx
http://msdn.microsoft.com/en-us/library/26db8ysc(VS.71).aspx


Download do exemplo: WebUserControl-Exemplo.zip (6,68 kb)

 

Tags:

ASP.Net

Explorando o ScriptManager

by Felipe Oriani 22. July 2009 17:15

Olá Pessoal, como vai ? Como todos sabemos, para trabalhar com os componentes do ASP.Net AJAX e Ajax Control Toolkit, devemos adicionar em nosso WebForm a instância de um ScriptManager para que ele nos permita ter controle maior das configurações do ASP.Net Ajax. Neste post irei demonstrar rápidamente alguns detalhes que as vezes passamos despercebidos aos implementar aplicações que utilizam o ASP.Net Ajax e desejamos ter maior controle em nossa aplicação.

Como recuperar a instância do ScriptManager.

Colocar o ScriptManager em uma MasterPage, é uma boa prática que muitos vem aderindo. Quando estamos em um WebForms e precisamos acessar o ScriptManager, poderiamos utilizar a instância e um ScriptManagerProxy que apontaria para nosso ScriptManager me uma MasterPage (por exemplo). Outra saída, seria utilizar a própria classe do ScriptManager e o método estático GetCurrent passando nossa página como argumento para que este método nos retorne o ScriptManager corrente e como por regra sempre temos apenas um, teremos a instância deste em mãos para facilitar a manipulação, veja o exemplo abaixo e como setar o foco em um controle:

 

//setando o foco em um controle chamado 'txtNome'
ScriptManager.GetCurrent(Page).SetFocus(txtNome);

 

Outra problema que as vezes passamos é quando precisamos testar nossas aplicações sem os postbacks internos nos UpdatePanel, você resolveria isso de forma fácil removendo o UpdatePanel, mas existe uma forma correta para desativar o ASP.Net Ajax que seria diretamente no ScriptManager alterar a propriedade EnablePartialRendering setando-a para "false". Essa propriedade ativa/desativa a renderização de forma "assíncrona" efetuada pelo ASP.Net AJAX. Desativando essa propriedade todos os UpdatePanelds da aplicação passarão a não fazer Postback assíncrono. Por default essa propriedade vem ativa; em versões anteriores do ASP.Net Ajax (conhecido como Atlas Framework), essa propriedade vinha desativada. Veja o exemplo abaixo:

 

<%-- desativando chamadas assíncronas --%>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="false"></asp:ScriptManager>

 

Bem pessoal, foi um post rápido sobre três dicas sobre o ScriptManager.
Espero que tenham gostado
Um abraço
Att,

 

Tags:

ASP.Net

Visual Studio 2010 - Aprenda

by Felipe Oriani 23. June 2009 10:53

Tags:

Visual Studio

Novidades no ASP.Net 4.0 e na IDE de Desenvolvimento

by Felipe Oriani 28. May 2009 17:51

Olá pessoal, tenho mais um post aqui com um link interessante sobre as novidades no ASP.Net 4.0 e na IDE de desenvolvimento (Visual Web Developer 2010 e Visual Studio 2010). Neste link, o autor fala um pouco sobre sobre as novidades que temos em Web Forms como trabalhar com tags meta através do code behine, novas funcionalidades no ASP.Net Ajax, maior controle sobre o ViewState de server-controls, gerenciamento de IDs gerado pelos server-controls, facilidade na persistencia de controles data bouds, melhor renderização do HTML em web forms, entre outras novidades. Vale a pena dar uma conferida!

http://msdn.microsoft.com/en-us/library/s57a598e(VS.100).aspx

Espero que acompanhem.

Um abraço.

Tags:

.Net Framework | ASP.Net | Visual Studio

Visual Studio 2010 Beta 1

by Felipe Oriani 26. May 2009 05:29

Algum tempo atrás, foi anunciado o Visual Studio 2010, e foi lançada uma versão CPT do Visual Studio 2010 no modelo de uma máquina virtual. Agora temos para download, o Visual Studio 2010 beta 1 junto ao .Net Framework 4.0 beta 1. No link abaixo você pode encontrar mais detalhes sobre a nova versão da IDE de desenvolvimento da Microsoft:

http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx

Existe também, um forum para discussão da versão do ASP.Net, à 4.0.

Acompanhem!

Fonte: www.asp.net

Tags:

.Net Framework | Visual Studio

Versão Nova do Ajax Control Toolkit

by Felipe Oriani 22. May 2009 11:28

Olá pessoal, na última quarta-feira (13/05/2009) foi lançada uma nova versão dos controles do Ajax Control Toolkit.  Esta nova versão inclui três novos controles que são eles:

HTMLEditor: Pode ser utilizado para criar uma caixa de formatação de texto, botões clássicos negrito, itálico, sublinhado, alinhamento de texto, cores, fonte, tamanho, dentre outros botões, inclusive permitindo que você possa adicionar novos botões e customizá-los.

ComboBox: Permite que você faça um ComboBox com alguns recursos que existem em Windows Forms, tais como, digitação de texto no controle, filtrar conteúdo, além de poder integrar com um DataSource.

ColorPicker: Este controle, permite ao usuários selecionar uma cor em um painel de cores, assim como é feito em alguns softwares para trabalho gráfico. Agora temos isso na web que poderá facilitar ainda mais nossa integração junto ao usuário.

Para quem tiver interesse, acesse o projeto no site do codeplex.

Mais uma vez o time de desenvolvimento do Ajax Control Toolkit, mostra sua qualidade nos controles e facilidade na utilização. Particularmente, gostaria que o time de desenvolvimento do Ajax Control Toolkit, prepara-se um controle semelhante a um Gridview, porém com recursos ajax de ordenação, redimensionamento, agrupamento, e classificação.

Espero que gostem!

Um abraço

Tags:

Adicionando atributos em objetos no WebForm.

by Felipe Oriani 22. May 2009 11:15

Olá Pessoal, vou deixar aqui uma boa prática muito comum que para programadores que vieram do Php oudo Asp para o ASP.Net costumavam fazer e agora podem fazer da mesma formaem ASP.Net. Irei demonstrar como adicionar rapitamente um atributo na tag HTML dosWeb Controls gerada peloASP.Net em tempo de execução.

O Problema

Na versão atualdo ASP.Net (3.5) e em suas versões anteriores, temos um problema quando desejamos manipular umatag HTML através de Javascript, ou seja, as tags que são utlizadas para renderizar um TextBox, CheckBox ou uma ComboBox  por exemplo, sãotags que são escritas por marcações definidas pela próprio framework, fazendo com que elas se encarreguem de gerara tag HTML correspondente ao código aplicadono ASP.Net para ser interpretado pelo Browser, o que nos impede de adicionar funcionalidadesclient-side utilizando do Javascript para determinados eventos pré-definidos durante o desenvolvimento de uma página.

Como resolver

Todos os controles que herdam da classeSystem.Web.UI.WebControls.WebControl contém uma propriedade chamadaAttributes que representa uma instancia da classe System.Web.UI.AttributeCollection. É através desta propriedade que iremos adicionar atributosas tags que serão utilizadas para renderizar em nosso HTML. Esta classe contém métodossemelhantes a um Dictonary, ou seja, pode-se incluir nesta valores do tipo string queserão representados por umachave, onde a chave é o atributo que será iniciado e o valor que será o que será aplicado ao atributo determinado pelachave. Em tempo de executação, existem duas formas de se aplicar os atributos, mas ambas refletem o mesmo resultado, veja como proceder:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

   txtCampo.Attributes("onblur") = "this.className='textBox';"
   txtCampo.Attributes("onfocus") = "this.className='textBox_focus';"
   btnCancelar.Attributes("onclick") = "return confirm('Deseja cancelar a operação ?');" 

End Sub

O exemplo ilustra o cenário onde um campo do tipo TextBox, nomeado como txtCampo seja aplicado os eventos onblur e onfocus o código javascript descrito (que tem porobjeto alterar o atributoclass datag input), enquando o outro código que exemplifica a atribuição do evento onclick em uma instância deum Button, onde o código javascript exibe uma caixa de confirmação com uma mensagem. Neste último caso, temos uma propriedade queja nos facilita este acesso ao onclick em client-side queé a OnClientClick da instancia deum Button, onde podemos atribuir umafunção javascript.

Novidades

Na versão 4.0 do ASP.Net que está para ser lançada junto ao Visual Studio 2010, espera-se que alguns destes problemas como o controle da saída HTML do Webform seja melhorada, assim teremosmaior liberdade em nosso desenvolvimento, buscando fazer um código limpo, leve e objetivo.

Tags: ,

.Net Framework | ASP.Net

Hello World

by Felipe Oriani 13. April 2009 11:10

Olá Pessoal, estou iniciando este blog novamente para postar novidades, dicas e artigos sobre o mundo da web, abordando desde o desenvolvimento até novidades em questões de padrões e tecnologias que sempre estão sendo inovadas. Bem isso é tudo! Espero que gostem, aproveitem e contribuam para uma sociedade de computação cada vez melhor. Escrevo neste blog para que possa ajudar alguém em um certo momento. Espero dele que se torne-se mais uma ferramenta no auxílio para pessoas com um conhecimento mais amplo foi para mim. Como diz Emmanuel, "Quem aprende a ouvir com atenção aprende a falar com proveito.".

 

Abraços
Felipe

Tags:

Geral

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Sobre

Sou Felipe Oriani e trabalho com desenvolvimento web desde 2004, com tecnologias Microsoft como Asp e Asp.Net utilizando as linguagens C# e Vb.Net. Bacharel em Ciência da Computação pela Escola de Engenharia de Piracicaba,  MCP (Microsoft Certified Professional) e lider da comunidade C# Brasil. Conheça um pouco mais sobre meu Currículum.

Selos

C# Brasil