Evento: MVCConf

by Felipe Oriani 21. July 2010 11:50

Olá amigos, dia 22/07/2010 acontecerá uma conferência online dedicada a temas diretamente relacionados ao ASP.Net MVC. Teremos a oportunidade de conferir o melhor  que a tecnologia nos oferece, além de boas práticas por profissionais experientes no assunto. O evento será gratuito e será composto por três salas, ou seja, 3 palestras ao mesmo tempo. Assuntos desde a Introdução ao MVC passando por JQuery, Frameworks (FubuMVC), Razor, Arquitetura até novidades de uma próxima versão (ASP.Net MVC 3) serão abordados. Para saber mais sobre o evento, acesse www.mvcconf.com, confira a agenda disponível e participe.

Tags: , ,

ASP.Net MVC

ASP.Net MVC - Desenvolvendo para o "Core" da Web

by Felipe Oriani 21. May 2010 12:23

Olá a todos! Algum tempo atrás a Microsoft já havia anunciado a versão MVC de sua plataforma de desenvolvimento web, o ASP.Net MVC. Esta por sua vez não veio como um sucessor da atual versão do ASP.Net WebForms e sim como uma alternativa tendo suas diferenças. Ambas as tecnologias são produtivas e eficientes e dizer que uma é melhor ou deixa de ser que a outra é pura falta de conhecimento.

Atualmente estamos na versão 2.0 do ASP.Net MVC, e espero que a Microsoft continue promovendo ambas as versões do ASP.Net, MVC e Webforms. Você pode fazer o download da versão 2.0 aqui e instalar, lembrando que o ASP.Net MVC contém compatibilidade apenas com as versões 2008 ou superior do Visual Studio.

Uma das principais vantagens que vejo no MVC perante ao Webforms, é que o primeiro foi desenvolvido diretamente para trabalhar já aplicando padrões de projetos (design patterns) e desenvolvimento orientado a testes (TDD) enquanto no segundo está mais focado no desenvolvimento orientado a componentes (entenda, como server controls) e eventos. Devemos ter em mente que tanto o ASP.Net MVC como o Webforms, contém o mesmo Núcleo, que é o ASP.Net CORE, o que permite o uso de diversos recursos que aplicamos em webforms, como chaching, logging, etc.

No ASP.Net MVC todo o output da aplicação web e todo o controle de estado ficam por conta do desenvolvedor (ou time de desenvolvimento) que por sua vez recomenda-se estar maduro em relação as Web Standards assim como em ASP (3.0), PHP e outras tecnologias. Dizer que isso é uma falta de produtividade é no mínimo imaturidade em relação a inovação tecnológica, pois em minha visão temos uma leve vantagem em relação ao ASP.Net Webforms, por exemplo: componentes de interfaces como grids, inputs, seletores, menus, etc...  podemos encontrar aos montes como extenções da JQuery, ExtJS, e outras bibliotecas client-side (javascript ou css) tornado as mais fáceis de se implementar em uma aplicação ASP.Net MVC pelo fato de termos controle do output, sem precisar se preocupar com os imensos campos conhecidos como ViewState que persistem o estado de cada server control (pecando um pouco na performace e output) em um webform.

Para quem estava acostumado a ASP.Net Webforms em montar suas URLs diretamente no sistema de arquivos, o cenário muda um pouco no ASP.Net MVC que por sua vez, utiliza um esquema de tabela de rotas que monta as URLs diretamente ligada aos Controllers que por sua vez retornam para o browser renderizar uma View, podendo passar um Model, mantendo URLs mais amigáveis aos usuários além de ter maior facilidade para integrar com otimizadores de buscas e SEO.

A versão 2.0 ainda trás novos recursos como maior suporte a Areas (que na versão 1.0 era possível porém exigia certo esforço do desenvolvedor para integrar), validação do Model em Client e Server side acesso assíncrono aos controllers, integração com sub-sessões (através do método Html.RenderAction que permite que a view renderize outra Action [outra View]) como resultado HTML, entre outros.

 

Existe um projeto demonstrativo no codeplex chamado MVC Music Store que aplica padrões de projetos junto a uma aplicação ASP.Net MVC 2.0. Trata-se de uma pequena loja virtual com um carrinho de compras implementado em C# e Entity Framework 4.0. Acesse o link do projeto em http://mvcmusicstore.codeplex.com/, faça o download e bons estudos.

 

 

 

Espero que gostem e bons estudos.

Abraços

Tags: , , , ,

.Net Framework | ASP.Net MVC | Padrões de Projetos

60 bibliotecas que todo desenvolvedor deveria conhecer.

by Felipe Oriani 17. February 2010 07:47

Olá pessoal, navegando pela web encontrei om link interessante e deixarei aqui como referência para quem quer tomar um rumo nos estudos. Trata-se de um post falando de diversas ferramentas que podem nos ajudar no processo de planejamento, desenvolvimento, testes e acompanhamento de um software. Segue o link

http://blog.webdistortion.com/2010/02/16/60-net-libraries-every-developer-should-know-about/

Espero que gostem!
Abraços

Tags: , ,

.Net Framework

C# Brasil - Compartilhando Conhecimento

by Felipe Oriani 29. January 2010 15:49

 

Olá a todos, a algum tempo estava pensando em criar uma comunidade para promover tecnologias que utilizo em minha vida profissional, e consequentemente fazer com que outras pessoas também possam contriuir para tal príncipio. Trabalhei por alguns anos com a linguagem C#, e tenho maior gosto por ela por ser uma primeiras linguagens que trabalhei em projetos que tiveram forte incluência em minha carreira profissional. Foi assim então que criei a rede social C# Brasil.

A principal razão de estar criando essa comunidade, é pelo fato de que algumas entidades onde participava (relacionadas a este assunto) deixaram de existir, então a partir disso nasceu a C# Brasil, com o intuito já citado.

A comunidade está acessível pelo endereço http://csharp.ning.com e todos podem se cadastrar e publicar algum material sobre C# no blog da comunidade, postar dúvidas no fórum, adicionar imagens e eventos relacionados a plataforma .Net Framework no geral.

 Obrigado a todos e participem, vamos levar adiante essa excelente tecnologia que está em constante evolução.

Abraços

Tags: , ,

.Net Framework | .Net Framework | C# | C#

Scrum em 10 minutos

by Felipe Oriani 8. December 2009 06:58

Olá a todos, faz tempo que não adiciono um post novo aqui (falta de tempo), no entanto vou deixar um link rápido aqui para um vídeo que encontrei na web, sobre uma metodologia da engenharia de software chamada SCRUM que em 10 minutos explora de forma geral os conceitos e como ela funciona. 

 

 

Espero que gostem

Abraços

 

 

Tags:

Engenharia de Software

Gerenciando Exceções em Aplicações .Net

by Felipe Oriani 7. September 2009 19:13

 

Olá pessoal, hoje vamos tratar de um assunto relacionado a tratamento de erros em aplicações .Net, no qual é muito importante para garantir a consistência da informação em certos momentos da execução e utilização de um software, seja na manutenção do código fonte, seja durante o desenvolvimento, em ambientes de testes e até mesmo em definição de regras de negócio que a aplicação deve atender.

Existem inúmeras classes no .Net Framework que são utilizadas para o tratamento de exceções (erros). Algumas destas classes já contem definições para um determinado tipo de exceção, como por exemplo, a classe FileNotFoundException que é disparada pelo .Net Framework quando a aplicação .Net tenta acessar um arquivo inexistente em disco. Estas classes já existentes para o tratamento de exceções no .Net Framework derivam de uma classe base chamada Exception, que contém uma definição bases para todo e qualquer tipo de erro/exceção que possa ocorrer durante a execução de uma aplicação .Net, seja web, windows forms ou distribuída.

Tratando exceções durante a execução.

Quando temos um bloco de código que sabemos que pode ocorrer uma exceção, devemos prevenir esta execução com o bloco try/catch/finally. Um código que é colocado entre este bloco, é determinado a tentar executar tal tarefa, e caso ocorra um erro é permitido que se trate o erro e tenha maior controle durante a execução. A listagem 1, exibe um exemplo de como o .Net Framework trata a execução dentre este bloco apresentado:

try

{

    //tenta executar um código

}

catch (Exception ex)

{

    //caso ocorra um erro, a execução irá entrar no bloco catch

    string mensagem = ex.Message;

}

finally

{

    //indepentende se ocorreu erro ou não,

    // este bloco é executado para finalização

}

Listagem 1: Bloco Try/Catch/Finally

Conforme a listagem 1 a execução que entra em um bloco try/catch/finally, entra no scopo do bloco try e executa o código, caso ocorra um erro, ela irá passar pelo scopo do bloco catch (perceba que resgatamos a exceção na declaração do bloco catch, e é aqui que podemos definir o tipo de exceção) e por fim , independentemente se ocorreu uma exceção ou não, é executado o bloco finally. Este último bloco finally, é opcional. Outro detalhe importante, é que esta estrutura de execução permite que coloquemos vários blocos catch, ou seja, podemos definir o tipo de exceção na declaração de vários blocos catch. Vale lembrar também que a execução de uma exceção em um bloco try/catch irá entrar no primeiro catch para qual a exceção disparada for cabível, ou seja, recomenda-se que o desenvolvedor especifique a declaração do bloco try/catch do tipo de exceção mais específica para a mais genérica. A listagem 2, exibe um exemplo para uma operação com arquivos:

 

try

{

    //tenta executar uma operação de IO

}

catch (FileNotFoundException ex)

{

    //caso o arquivo não tenha sido encontrado            

}

catch (FieldAccessException ex)

{

    //caso o arquivo não esteja acessível

}

catch (IOException ex)

{

    //erro geral no sistema de arquivos

}

catch (Exception ex)

{

    //erro geral na execução

}

finally

{

    //finalização de streams

}

Listagem 2: Demonstração de execução de blocos try/catch/finally

Como podemos ver no exemplo acima, temos quatro possíveis erros na execução deste código no qual executa uma operação de IO.

Criando as nossas exceções

Podemos também ter, além disso, nossas próprias exceções customizadas, mantendo informações personalizadas a respeito de o erro em questão. Por exemplo, um cliente que deseja fazer uma compra em um sistema de comércio e este está com pendências em haver com o setor financeiro da companhia. Podemos tratar estes problemas criando uma classe que derive de Exception e armazene informações do cliente para identificação durante a execução. A listagem 3 exibe um exemplo de uma classe customizada para o tratamento desta exceção.

public class ClienteDevendoException : Exception

{

    private Cliente _cliente;

    public Cliente Cliente

    {

        get { return _cliente; }

    }

 

    public ClienteDevendoException(int Id)

        : base("Cliente está com pendências no setor finânceiro. Favor verificar.")

    {

        _cliente = new Cliente(Id);

    }

 

    public ClienteDevendoException(Cliente cliente)

        : base(String.Format("O Cliente {0} está com pendências no setor finânceiro. Favor verificar.", cliente.Nome))

    {

        _cliente = cliente;

    }

}

Listagem 3: Criação de uma classe de exceção customizada.

Como podemos notar, a classe deriva de Exception que é a classe base e contém algumas customizações, como a mensagem de erro, e um objeto interno contendo a representação do cliente, sendo que em seu construtor ele pode receber um objeto do tipo Cliente ou o próprio Id do cliente.  Note também que a classe contém em seu nome o prefixo Exception, na qual é uma boa prática na nomeação de classes com esta finalidade, outro exemplo seria uma compra na qual o caixa não contém crédito suficiente, por exemplo: “CreditoInsuficienteException”.

Disparando exceções

Além de poder recuperar exceções durante a execução, podemos também dispará-las caso alguma informação seja executada incorretamente, como por exemplo, as regras de negócio de uma aplicação. Seguindo o exemplo anterior, nas regras de negócio de uma aplicação comercial um cliente não pode realizar uma compra caso contenha pendências com o setor financeiro da empresa, então podemos desenvolver uma execução como a listagem 4, disparando a exceção caso a condição não atenda aos quesitos.

if (ContemPendenciasFinanceiras(Cliente.Id))

{

    throw new ClienteDevendoException(Cliente);

}

 

Listagem 4: Disparando uma exceção.

Como podemos notar, utilizando a palavra-chave “throw”, podemos lançar a exceção para a execução da aplicação e interromper a execução do método no qual está realizando esta operação de venda e impedir que ela ocorra.

Da mesma forma que recuperamos a exceções no exemplo com operações de IO, podemos recuperar esta exceção customizada, veja na listagem 5.

try

{

    Venda venda = new Venda();

   

    foreach(VendaItem item in Itens)

    {

        venda.Items.Add(item);

    }

 

    venda.Cliente = new Cliente(IdCliente);

   

    venda.Finalizar();                    

 

    venda.ImprimirNotaFiscal();

}

catch(ClienteDevendoException ex)

{

    //cliente com pendencias

}

catch(Exception ex)

{

    //erros gerais

}

finally

{

 

}

Listagem 5: Execução e recuperação de exceção customizada.

Como podemos notar no exemplo, temos a execução de uma camada de aplicação simples na qual trata a criação de uma venda com o Cliente contendo pendências e erros comuns que possam ocorrer durante a execução com o bloco Exception.

Recomendações

Não tente utilizar o bloco try/catch para realizar tarefas que você tem certeza que possa ocorrer o erro e definir o valor de uma variável de retorno de funções.

Bem pessoal isso é tudo. Espero que tenha conseguido demonstrado de forma fácil como tratar e gerenciar melhor a execução de uma aplicação .Net.

Um abraço

 

Tags:

.Net Framework

Themes em ASP.Net (Parte 2)

by Felipe Oriani 26. August 2009 18:37

 

Olá, neste segundo artigo sobre Themes, irei demonstrar como configurar em tempo de execução o theme utilizado por um webform e como configurar um theme para a aplicação completa, sem a necessidade de ficar dizendo toda vez que criamos um webform que iremos utilizar tal theme em questão. Além disso, vou demonstrar de forma fácil como podemos utilizar CSS junto aos themes, para aumentar nossa produtividade. Para exemplificação, irei continuar com os fontes do primeiro artigo, se você ainda não leu, leia aqui.

Integrando os Themes com CSS

Sabemos que o CSS é uma tecnologia utilizada para formatação de estilos e cores em uma página na web mantendo uma organização melhor em um código fonte. Atualmente esta tecnologia está ficando cada vez mais difundida junto as Web Standards (HTML, xHTML, XML e Javascript), padrões da web 2.0 e aplicando-se muito com um conceito chamado tableless.

Em ASP.Net, podemos utilizar o CSS de forma pura ou então aplicar este junto com os themes. A vantagem de aplicarmos junto com os themes é que além do recurso (themes) ter sido criado para este fim (formatação de forma geral) ele se encarrega de fazer algumas tarefas e organizar nosso código para que funcione de forma adequada, que quando fazemos com o CSS puro, devemos aplicar.

Continuando nosso projeto, abra-o no Visual Studio e na pasta Azul (lembre-se que esta pasta é um theme que foi criado dentro da pasta App_Themes), clique com o botão direito e selecione “Add New Item”. Em seguida, escolha o tipo “Style Sheet”, forneça um nome e clique em OK. Feito isso, adicione algumas classes de formações CSS em nosso arquivo; a listagem 1, exemplifica uma formatação definida em CSS.

 

.textBox

{

      font-size:12px;

      font-family:Arial Verdana Sans-Serif;

      color:#0000AA;

      background-color:#efefef;

      border:solid 1px #3333FF;

}

 

.dropDownList

{

      font-size:12px;

      font-family:Arial Verdana Sans-Serif;

      color:#0000AA;

      background-color:#efefef;

      padding:5px;

      border:solid 1px #3333FF;

}

 

.button

{

      font-size:12px;

      font-family:Arial Verdana Sans-Serif;

      color:#ffffff;

      background-color:#000055;

      padding:5px;

      border:solid 2px @dfdfdf;

}

Listagem 1: Formatação CSS de exemplo

 

 Em seguida, abra o arquivo .Skin criado no primeiro artigo, e defina a propriedade CssClass de cada controle para o nome de uma classe CSS criada em nosso arquivo exemplificado anteriormente. A listagem 2 exibe como nosso arquivo .Skin pode ficar:

 

<asp:TextBox runat="server"

             CssClass="textBox" />

            

<asp:DropDownList runat="server"

             CssClass="dropDownList" />

            

<asp:Label runat="server"

           ForeColor="Blue"

           Font-Size="11px"

           Font-Names="Tahoma"

           Font-Bold="true" />

          

<asp:Button runat="server"

           CssClass="button" />

Listagem 2: Formatação de Skin utilizando CSS

 

Se você notar o código da listagem 2, verá que mantivemos a formatação comum para a tag Label, ou seja, os themes permitem que utilizemos recursos do CSS junto com as formatações clássicas do ASP.Net.

Execute a aplicação e como no tutorial anterior fizemos a configuração do theme para a página Default.aspx, esta por sua vez já irá assumir este theme e trabalhat sobre ele.

Ao executar a página, note que as formatações aplicadas no CSS já são incluídas em cada controle, ou seja, o ASP.Net já se encarrega e incluir para nós todos os arquivos com extenção .css disponíveis na pasta do theme configurado, no caso, o theme Azul.  Sendo assim, podemos ter qualquer webform em qualquer local da aplicação (dentro de subpastas) que o ASP.Net se encarrega se incluir os arquivos .CSS de acordo com o caminho do webform.

Configurando um theme em tempo  de execução.

Podemos configurar nosso theme em tempo de execução, ou seja, durante a rendereização de um webform, podemos informar qual o theme a se utilizado. A vantagem de fazermos importa que em alguns casos possamos querer carregar o theme de acordo com determinadas condições, um exemplo disso seria o perfil de um usuário autenticado na aplicação que de acordo com este carrega-se outro theme, entre outras condições que podem vir a sua necessidade.

Antes em nosso exemplo remova o valor da propriedade theme na diretiva Page de nosso webform, pois quando informamos em modo design no artigo anterior, ele aplica o valor na diretiva Page, como propriedade do webform (que herda da classe Page).

Agora em nosso webform, no code-behine adicione o evento OnPreInit e adicione o código da listagem 3.

 

protected override void OnPreInit(EventArgs e)

{

    base.OnPreInit(e);

    this.Theme = "Azul";

}

Listagem 3: Definição de theme em tempo de execução

 

Com isso você consegue facilmente criar condições e setar a propriedade Theme (string) que o ASP.Net irá se encarregar de renderizar com as informações contidas neste theme especificado.

Configurando um theme para toda a aplicação.

Outra saída de configuração, porém muito utilizada quando desejamos ter apenas um theme, é a configuração direta no arquivo de configuração (web.config). Na tag <Page>, podemos informar o qual theme será utilizado através de um atributo chamado “theme”, e sendo assim, toda webform da aplicação que estiver no nível do arquivo de configuração irá assumir este theme. O código da listagem 4, exemplifica como seria esta modificação no web.config.

 

<pages theme="Azul">

      <controls>

            <add />

            <add />

      </controls>

</pages>

 Listagem 4: Definição de theme no arquivo de configuração


Bem pessoal, vimos como de forma fácil podemos aplicar estilos de formatações com CSS em nossas aplicações e também como configurar um theme para ser utilizado em nossa aplicação de forma dinâmica e também como uma forma fixa (em situações onde temos apenas uma formatação). Espero que tenham gostado e caso queria comentar, sugerir, criticar e/ou elogiar, sintam-se a vontade.

Um abraço a todos e até a próxima.

 

Exemplos: ThemesExemplo - Part 2.zip (4,33 kb)

Referências:

http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx
http://www.odetocode.com/articles/423.aspx


Tags: ,

ASP.Net

Themes em ASP.Net (Parte 1)

by Felipe Oriani 19. August 2009 16:58

Olá Pessoal, neste artigo vou demonstrar um grande recurso do ASP.Net chamado Themes.  Este recurso no ASP.Net visa centralizar todo o estilo de nossa aplicação, buscando formatar controles,  trabalhar com imagens, utilização de CSS, layouts de estrutura (quando utilizamos tableless), dentre outros recursos voltados a formatação em geral.

Podemos dizer que para utilizar este recurso, precisamos entender três etapas básicas para tirarmos bons proveitos e são elas:

  1. Definir a pasta especial para themes de nossa aplicação;
  2. Criar um theme para a aplicação;
  3. Configurar o uso deste theme em questão;

 

Vamos tentar passar por estas três etapas e entender melhor como funciona este recurso.

Definir a pasta especial para themes de nossa aplicação

Como sabemos, em ASP.Net temos algumas pastas que são especiais, ou seja, são determinadas a fazer executar uma tarefa específica, como por exemplo, a pasta App_Code que têm por objetivo manter fontes de classes utilizadas na aplicação, e para os Themes não é diferente.  Temos uma pasta chamada App_Themes, que mantém todos os temas de nossa aplicação, ou seja, a aplicação em questão pode conter mais de um theme, o que lhe permite facilmente trocar o theme da aplicação à qualquer momento.

A utilidade de se manter mais de um theme na aplicação visa facilitar a troca do estilo de nossa aplicação, por exemplo, em um cenário onde o usuário autenticado pode escolher dentre três themes diferentes o seu preferido, fica fácil podermos alterar qual será utilizado por este usuário e manter tal estilo durante toda a sua sessão.

Nota: Os themes foram inseridos no ASP.Net a partir de sua versão 2.0, então você pode aplicar os conceitos apresentados aqui para qualquer versão igual ou superior a versão 2.0, utilizando Visual Studio 2005 ou 2008.

Criar um theme para nossa aplicação

Bem, vamos à prática. Abra o Visual Studio e crie um novo Website.  Com o criado, na solution Explorer clique com o direito na raiz do website e no menu de contexto, selecione o item Add ASP.Net Folder (você verá aqui todas as pastas especiais do ASP.Net) e clique em Themes. Feito isso o Visual Studio já nos cria a pasta App_Themes (utilizada para armazenar os themes) na raiz do website e já adiciona uma sub-pasta para um novo theme de nossa aplicação nos dando a possibilidade de renomea-la. A figura 1 ilustra como deve ficar nosso Solution Explorer até o momento.

 

Informe o nome que você deseja para seu primeiro theme (em nosso exemplo, estarei informando o nome “Azul”, para criar um theme com cores em tons de azul) e em seguida clique com o direito nesta pasta e no menu de contexto clique em Add New Item. Na janela que irá surgir, selecione o item Skin File e clique em OK.  A figura 1 ilustra nosso Solution Explorer como deve estar até o momento:

 

Figura 1: Solution Explorer da utilização de themes

 

Nota: Arquivos do tipo “Skin” são muito úteis, pois são eles que definem o estilo de cada controle em nossa aplicação, como por exemplo, TextBoxes, DropDownLists, GridViews, Validators, entre outros controles.

Seguindo nosso tutorial, no arquivo Skin adicionado, devemos adicionar a formatação de cada controle sem identificar o Id. A listagem 1 exibe um código de exemplo para um Theme.

 

<asp:TextBox runat="server"

             ForeColor="DarkBlue"

             Font-Size="11px"

             Font-Names="Tahoma"

             BorderColor="#3333FF"

             BorderStyle="Solid"

             BorderWidth="1px" />

            

<asp:DropDownList runat="server"

             ForeColor="Blue"

             Font-Size="11px"

             Font-Names="Tahoma"

             BackColor="LightBlue"

             BorderColor="#3333FF"

             BorderStyle="Solid"

             BorderWidth="1px" />

            

<asp:Label runat="server"

           ForeColor="Blue"

           Font-Size="11px"

           Font-Names="Tahoma"

           Font-Bold="true" />

          

<asp:Button runat="server"

           ForeColor="White"

           Font-Size="11px"

           Font-Names="Tahoma"

           Font-Bold="true"

           BackColor="DarkBlue"

           BorderColor="LightBlue"

           BorderStyle="Solid"

           BorderWidth="2px" />

 

Listagem 1: Definindo formatações para um theme

 

Como vocês podem ver, definimos formatações para controles do tipo TextBox, DropDownList, Label e Button, ou seja, toda vez que algum de nossos web forms estiver utilizando este theme, automaticamente os controles destes tipos estarão aplicando os estilos definidos.

Configurando um Theme

Agora em nossa página Default.aspx, em modo Design na janela de propriedade encontre a propriedade Theme, repare que o Visual Studio já entende que temos o tal Theme para selecionar então informe o theme Azul conforme a figura 2.

 

Figura 2: Configurando um theme em um webform

 

Uma vez com o theme configurado para este webform, arrastre alguns controles para o webform para fazermos alguns testes com nossa aplicação. A listagem 2 exibe um código para nosso webform de exemplo:

 

<table>

    <tr>

        <td><asp:Label ID="lblNome" runat="server" Text="Nome:"></asp:Label></td>

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

    </tr>

    <tr>

        <td><asp:Label ID="lblCidade" runat="server" Text="Cidade:" Width="200px"></asp:Label></td>

        <td>

            <asp:DropDownList ID="dropCidade" runat="server">

                <asp:ListItem Text="Piracicaba"></asp:ListItem>

                <asp:ListItem Text="Campinas"></asp:ListItem>

                <asp:ListItem Text="São Paulo"></asp:ListItem>

                <asp:ListItem Text="Rio de Janeiro"></asp:ListItem>

            </asp:DropDownList>

        </td>

    </tr>

    <tr>

        <td><asp:Label ID="lblAssunto" runat="server" Text="Assunto:"></asp:Label></td>

        <td><asp:TextBox ID="txtAssunto" runat="server" Columns="30"></asp:TextBox></td>

    </tr>           

    <tr>

        <td><asp:Label ID="lblEmail" runat="server" Text="Email:"></asp:Label></td>

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

    </tr>

    <tr>

        <td><asp:Label ID="lblMensagem" runat="server" Text="Nome:"></asp:Label></td>

        <td><asp:TextBox ID="txtMensagem" runat="server" Rows="5" Columns="40"
                         TextMode="MultiLine"></asp:TextBox></td>

    </tr>

    <tr>

        <td colspan="2"><asp:Button ID="btnEnviar" runat="server" Text="Enviar" /></td>

    </tr>

</table>

 

Listagem 2: Webform de exemplo utilizando controles clássicos do ASP.Net

 

Em seguida execute a aplicação e veja que eles já assumem o perfil aplicado em nosso arquivo Skin. A figura 3 exibe a aplicação rodando com os themes aplicados.

 

 

Figura 3: Aplicação operando com um theme configurado.

 

Pessoal, vimos como de forma fácil podemos aplicar estilos de formatações em nossas aplicações. Em um próximo artigo vou demonstrar como fazer a configuração do theme para a aplicação como um todo e também em tempo de execução (runtime) para a possibilidade de um usuário poder escolher seu theme preferido.

Espero que tenham entendido como funciona este grande recurso do ASP.Net.
Um abraço
Att,

 

Referência: http://msdn.microsoft.com/en-us/library/ykzx33wh.aspx

Exemplo: ThemesExemplo.zip (4,05 kb)

 

 

Tags: , ,

ASP.Net

Cookies em ASP.Net

by Felipe Oriani 15. August 2009 07:51

Olá Pessoal, hoje vou demonstrar de forma rápida e fácil de trabalhar com um dos recursos que as tecnologias em ambiente web permitem, é a utilização de Cookies.

Um cookie pode considerar-se que é um arquivo de texto que é enviado à máquina do cliente contendo informações para que a aplicação ou web site possa persistir diretamente no cliente, ou seja, é uma informação para aquele cliente em questão. Além destas informações, um cookie mantém informações a respeito de sua validade, conceitos de chaves/valor para cookies e a qual domínio ele foi gerado/pertence. Alguns exemplos de sua utilização são como armazenar informações a respeito do login do usuário em uma área restritira, manter um controle dos produtos mais acessados em uma loja virtual, entre outras formas.

Em ASP.Net para se utilizar um cookie, devemos utilizar um objeto da classe HttpCookie e enviar este objeto ao cliente através do objeto intrínseco Response. Para fazer a recuperação deste cookie, podemos utilizar o objeto intrínseco Request. Vamos a um simples exemplo:

// criando um objeto cookie para enviar ao cliente

// seu construtor permite que passemos um nome e um valor, ambos do tipo string

HttpCookie cookie = new HttpCookie("teste","abc");

//definindo uma validade de 3 horas para este cookie

cookie.Expires = DateTime.Now.AddHours(3);

       

//enviando ao cliente

Response.AppendCookie(cookie);

 

E para fazermos a recuperação deste cookie:

//recuperando um cookie através da chave

HttpCookie cookie = Request.Cookies["teste"];


//caso ele não tenha expirado e não seja nulo

if (cookie != null)

{
    //recuperando o valor do cookie

    string valor = cookie.Value;

    Response.Write(valor);

}

 

Podemos também utilizar coleções do tipo chave/valor através da propriedade Values, que representa uma coleção da classe System.Collections.Specialized.NameValueCollection para enviar informações ao cliente, por exemplo:

// criando um objeto cookie para enviar ao cliente

// eu construtor permite que passemos apenas um nome

HttpCookie cookie = new HttpCookie("teste");

//definindo valores

cookie.Values["valor1"] = "Felipe";

cookie.Values["valor2"] = "Oriani";

cookie.Values["valor3"] = "Piracicaba";

cookie.Values["valor4"] = "São Paulo";

 

 

//definindo uma validade de 3 horas para este cookie

cookie.Expires = DateTime.Now.AddHours(3);

 

//enviando ao cliente

Response.AppendCookie(cookie);

 


//recuperando um cookie pelo nome

HttpCookie cook = Request.Cookies["teste"];


//caso ele não tenha expirado e não seja nulo

if (cook != null)

{

    //obtendo os valores de cada chave

    string valor1 = cook.Values["valor1"];

    string valor2 = cook.Values["valor2"];

    string valor3 = cook.Values["valor3"];

    string valor4 = cook.Values["valor4"];

    Response.Write(valor1 + ", " + valor2 + ", " + valor3 + ", " + valor4);

} 

 

Devemos ter alguns cuidados na utilização de cookies, pois como estes são dados que serão enviados e salvos no cliente, estes arquivos tornam-se vulneráveis a softwares maliciosos e podem ler as informações e fazer algo que não desejamos como modificar a informação e enviar a terceiros. Dados que não devemos gravar em cookies são senhas, número de cartão de créditos, informações sigilosas, entre outros tipos de dados. Além disso, outro cuidado que se torna necessário em algumas ocasiões é verificar se o browser do cliente está com o suporte a cookies, pois muitas vezes este suporte pode estar desativado e sendo assim perdemos este recurso de persistência de informação.  Para verificar se o browser contém suporte, podemos utilizar a propriedade Browser do objeto intrínseco Request que persiste um objeto da classe HttpBrowserCapabilities (no qual contém informações do browser do cliente). Veja como fazer esta verificação:

if (Request.Browser.Cookies)

{

    //suporte cookies

}

else

{

    //não suporte cookies

}

O mesmo pode ser feito para outras propriedades deste objeto, como por exemplo:

if (Request.Browser.JavaScript)

{

    //suporte Javascript

}

 

if (Request.Browser.IsMobileDevice)

{

    //está sendo acessado de um dispositivo móvel

}

 

if (Request.Browser.JavaApplets)

{

    //suporte a Java

}

 

Bem pessoal, é isso. Com cautela você pode utilizar Cookies em aplicações web e tirar bom proveito deste recurso de persistência de informação.

Espero que tenham gostado
Um abraço e até a próxima

Referências:
http://msdn.microsoft.com/pt-br/library/system.web.httpcookie.aspx
http://msdn.microsoft.com/en-us/library/system.web.httpcookie_members.aspx

 

Tags:

ASP.Net

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

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