Destaques

Certificações Prometric 20% e Second Shot LEVE A SUA CARREIRA EM INFORMÁTICA até o SEU PRÓXIMO DESTINO ECONOMIZE ATÉ 20% NOS PACOTES DE CERTIFICAÇÃO DA MICROSOFT COM SEGUNDAS TENTATIVAS GRÁTIS http://bit.ly/bkRfRc

Ler Artigo Completo

Palestra Cloud Computing na ULBRA/PVH Na semana de informática da Ulbra de Porto Velho/RO, tive a oportunidade pelo SENAI/RO de ir debater sobre Cloud Computing & SQL Azure, segue fotos do evento: [caption id="attachment_320" align="aligncenter"...

Ler Artigo Completo

MS lança Visual Studio focado na nuvem Família Visual Studio crescendo, foi divulgado nesta terça-feira, 03 de agosto o lançamento de do Visual Studio LightSwitch, especial para foco em desenvolvimento na Nuvem. Por enquanto será...

Ler Artigo Completo

Palestras no Tech Ed 2010 Disponíveis! Bem vindos ao Tech·Ed 2010 O maior evento técnico brasileiro voltado para profissionais de TI e Desenvolvedores que utilizam a tecnologia Microsoft em seu dia a dia, este ano vem repleto de novidades. Você...

Ler Artigo Completo

Microsoft em Números Se você anda antenado nas notícias do “mundo Microsoft” deve ter ouvido falar na semana passada sobre as vendas do Windows 7 terem alcançado o número de 150 milhões de cópias em 8 meses, o que...

Ler Artigo Completo

  • Prev
  • Next

Usando o ASP:Repeater

1

Categoria: ASP.Net, Desenv. Web, Ferramentas & Linguagens, Visual C#, Visual Studio, Visual Studio Express, Visual Studio Team System

Olá membros e visitantes, estou escrevendo mais um artigo simples, porém, muito útil para quem ainda esta querendo se familiarizar com o ASP:Repeater, eu particularmente utilizando muito, prefiro montar meu layout mais livre com tags xhtml – flexibilidade -, é ideal para quem prefere ter mais controle da formatação do layout , por este motivo opto por ele.

Templates

<ItemTemplate>: este template é responsável por executar o “looping” nos registros exibindo na tela a formatação inserida nele. Template obrigatório.

<AlternatingItemTemplate>: tem a mesma funcionalidade do ItemTemplate, porém, neste template você pode definir um layout diferenciado, por exemplo, mudando cor de fundo da linha. Template Opcional.

<SeparatorTemplate>: exibe um layout de separação entre os itens do “looping”. Template Opcional.

<HeaderTemplate>: define um cabeçalho para o layout antes de iniciar um “looping”. Template Opcional.

<FooterTemplate>: define um rodapé para o layout após final de um “looping”. Template Opcional.

Cuidado:

Pelo ASP:Repeater ser um controle de saída, pode executar no browser do client, scripts maliciosos, para evitar este problema você precisa fazer uma validação específica, veja mais detalhes em Validação Server-Side. Rende mais um artigo futuramente :)

Html

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!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>Usando ASP:Repeater ASP.Net</title>
    <style type="text/css">
        li
        {
            width: 200px;
            padding: 10px;
            font: bold 14px "trebuchet MS";
        }
        .cinza
        {
            background: #F0F0F0;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div id="all">
        <h3>EMPRESAS DE INFORMÁTICA</h3><br />
        <asp:Repeater ID="rptDados" runat="server">
            <HeaderTemplate>
                <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <%# Eval("Nome") %></li>
            </ItemTemplate>
            <AlternatingItemTemplate>
                <li>
                    <%# Eval("Nome") %></li>
            </AlternatingItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

Code Behind

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ArrayList values = new ArrayList();

            values.Add(new Dados("Microsoft", "Msft"));
            values.Add(new Dados("Intel", "Intc"));
            values.Add(new Dados("Dell", "Dell"));

            rptDados.DataSource = values;
            rptDados.DataBind();
        }
    }
}

public class Dados
{
    private string nome;
    private string sigla;

    public Dados(string nome, string sigla)
    {
        this.nome = nome;
        this.sigla = sigla;
    }

    public string Nome
    {
        get
        {
            return nome;
        }
    }

    public string Sigla
    {
        get
        {
            return sigla;
        }
    }
}

Explicação

Criação de uma classe pública de nome “Dados” com dois campos string para armazenar informações, servindo de fonte de dados para o ASP:Repeater. Criação de um ArrayList, e inserção de valores, para este código seu resultado deve ser como na imagem abaixo:

Muito simples usar ASP:Repeater né? Agora fica a pergunta, se na minha fonte de dados não tiver nenhuma informações como irá mostrar o resultado para o cliente? Simplesmente, não tem resultado nenhum e não existe nenhum configuração para que você informe uma mensagem do tipo: “Nenhum registro cadastrado!”, agora vem a dica de como obter esse resultado.

Antes do ASP:Repetar no Html vamos criar uma div com a propriedade runat=”server”, visibility=”false”, essa div ficará com a mensagem e não será exibida para o nosso cliente, somente quando o ASP:Repeater não contiver informações na fonte de dados, código abaixo adaptado:

 Html

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!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>Usando ASP:Repeater ASP.Net</title>
    <style type="text/css">
        li
        {
            width: 200px;
            padding: 10px;
            font: bold 14px "trebuchet MS";
        }
        .cinza
        {
            background: #F0F0F0;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div id="all">
        <h3>EMPRESAS DE INFORMÁTICA</h3><br />
        <div id="mensagem" runat="server" visible="false">
            Nenhum registro cadastrado!
        </div>
        <asp:Repeater ID="rptDados" runat="server">
            <HeaderTemplate>
                <ul>
            </HeaderTemplate>
            <ItemTemplate>
                <li>
                    <%# Eval("Nome") %></li>
            </ItemTemplate>
            <AlternatingItemTemplate>
                <li>
                    <%# Eval("Nome") %></li>
            </AlternatingItemTemplate>
            <FooterTemplate>
                </ul>
            </FooterTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

Code Behind

if (!IsPostBack)
        {
            ArrayList values = new ArrayList();

            values.Add(new Dados("Microsoft", "Msft"));
            values.Add(new Dados("Intel", "Intc"));
            values.Add(new Dados("Dell", "Dell"));

            rptDados.DataSource = values;
            rptDados.DataBind();
            rptDados.Visible = (rptDados.Items.Count > 0);
            mensagem.Visible = !(rptDados.Items.Count > 0);
        }

Para ver o resultado comente as linhas que adicionando valores ao ArrayList:

//values.Add(new Dados("Microsoft", "Msft"));
//values.Add(new Dados("Intel", "Intc"));
//values.Add(new Dados("Dell", "Dell"));

Pronto agora seu ASP:Repeater irá mostrar uma mensagem mais amigável para o cliente quando a fonte de dados não possuir informações.

Referências:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.aspx

Atenciosamente,

Ricardo M Machado

MCT, MCITP, MCTS – Community Leader.

Community Launch 2010 – Campinas

Categoria: ASP.Net, Eventos, Hyper-V, SQL Server, TI, Visual Studio, Visual Studio Team System, Windows 7, Windows Server 2008

Vem aí o Community Launch 2010!

No dia 20 de março, a comunidade técnica, com o apoio da Microsoft – Portais MSDN e Technet, realizará o lançamento de novas soluções Microsoft simultaneamente em diversas cidades. E você é imprescindível para o sucesso deste evento!

Contamos com a sua presença para este grande encontro onde vamos capacitar e engajar a comunidade técnica de Campinas e aproximar os profissionais dos novos produtos e tecnologias Microsoft:

  • Visual Studio 2010
  • Windows Server R2
  • SQL Server 2008 R2  
  • Windows 7
  • Hyper-V

A inscrição é feita pelo site de eventos da Microsoft:
 http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032446107&Culture=pt-BR

Participe, entre no site e faça sua inscrição GRATUITA no evento.
Atenciosamente,

Ricardo M Machado
MCT, MCITP, MCTS – Community Leader.

Algumas dicas de boas práticas

1

Categoria: ASP.Net, Patterns & Practices, Segurança, Visual C#

Olá,

Ricardo Buxudinho Machado já abriu a seção de posts técnicos com dois excelentes artigos, um bom texto sobre aplicações N-Camadas e uma boa dica com o MS-Excel, muito util por sinal, já até usei a dica dele hoje no meu trabalho… :P

Então aqui estou eu com mais um post técnico, este sobre ASP.NET

Nada melhor do que uma boa “surra” durante o desenvolvimento de uma aplicação para você aprender uma serie de coisas uteis que provavelmente você levara para resto de sua vida profissional, tive que passar umas boas horas de pesquisa para que eu pudesse ficar menos preocupado com a segurança e desempenho de algumas aplicações que finalizei recentemente, então resolvi montar uma pequena listagem com algumas dicas que eu vi pela net, alguns MOCs e Training Kit, que julgo necessárias para quando for desenvolver uma aplicação web, logicamente que a importância dessas dicas vai depender do cenário da sua aplicação.

Desempenho

  1. Sempre defina a propriedade EnableViewState para false quando você não for precisar do ViewState na página. Por padrão esta opção já vem configurada como true, mas podemos mudá-la na diretiva @Page
  2. Sempre que estamos desenvolvendo uma aplicação somos obrigados a efetuar o famoso debug, para podermos fazer testes e procurar erros em nosso código. Ao escolhermos a primeira opção na figura 1, automaticamente mudamos o valor do elemento compilation para true, só que às vezes por descuido, falta de conhecimento ou até mesmo preguiça de ler o alerta mostrado na mesma figura 1, deixamos nossa aplicação ir pra produção em modo de compilação causando uma perda de desempenho. Defina o atributo debug do elemento compilation no WEB.CONFIG para false como mostra a figura 2. Esse descuido é um grande inimigo do desempenho em aplicações  cujo o ambiente é de produção.

    Aviso de de ativação do debug

    Aviso de Ativação do Debug

    Imagem 1


    Configuração necessária para desativar o debug no elemento compilation do WEB.CONFIG

    Imagem 2

  3. Desabilite a Session nas páginas que não forem usá-la. Isso pode ser feito na diretiva @Page, atribuindo o valor false para o atributo EnableSessionSate. No caso de nem uma pagina de sua aplicação precisar usá-la, desabilite-a em nível de aplicação realizando a mesma ação no elemento EnableSessionState do WEB.CONFIG da aplicação.
  4. Remova todos os HTTP Headers desnecessários.  Geralmente o ISS possui alguns valores padrões que são enviados como resposta pata todos os clientes que consomem a aplicação. Como por exemplo, o “X-Powered by ASP.NET”. Este valor pode ser retirado diretamente no ISS ou via código através do atributo EnableVersionHeader do elemento httpRumtime do WEB.CONFIG.
  5. Reduza a quantidade de round-trips entre cliente/servidor. Para isso utilize sempre o método Server.Transfer.
  6. Remova todos os módulos que não estão sendo utilizados pela aplicação. Isso poder ser feito através do WEB.CONFIG, como podemos ver abaixo:

Configuração a ser feita no WEB.CONFIG.

Segurança

  1. Sempre crie uma página padrão de erros para que o usuário seja redirecionado para ela quando um problema ocorrer. Para isso, configure o elemento do arquivo WEB.CONFIG. Neste mesmo local, evite que as exceções sejam enviadas para os usuários, definindo o atributo mode para RemoteOnly. Isso evitará exibir detalhes da exceção que ocorreu, qual pode comprometer a sua aplicação.
  2. Nunca se esqueça de validar os parâmetros fornecidos pelo usuário (Forms, QueryStrings, etc). Quando eu falo “os parâmetros”, quero dizer TODOS, devem ser validados por tamanho, tipo e formato.
  3. Informação Sigilosa? Hehe… Sempre tem, né!?!?.  É altamente recomendável que você descarte a possibilidade de guardá-las em QueryStrings ou ViewState. Caso não tenha outra alternativa, e precisar armazenar no ViewState, então criptografe-o. Para isso defina o valor “auto” para o atributo ViewStateEncryptionMode do elemento e invoque o método RegisterRequiresViewStateEncryption na página em que deseja armazenar o conteúdo sigiloso no ViewState.
  4. Criptografe a seção de ConnectionStrings do WEB.CONFIG
  5. Sempre armazene password “Hasheados” em sua base de dados. Caso você utilize  o MemberShip, ele já fornece isso intrinsecamente
  6. Ao conectar em uma base de dados, sempre utilize um usuário que tenha permissão apenas para manipular os objetos que estão sendo utilizados pela aplicação.

Boas Práticas

  1. Ao definir o nome da aplicação, utilize sempre o applicationName, caso você resolva utilizar o Membership, RoleProvider, Profile.
  2. Caso utilize o tratamento global de exceções, habilite o Health Monitoring para criar logs de exceções para que você possa fazer uma análise posteriormente.
  3. Quando sua aplicação for para produção, desabilite o trace. Caso precise utilizá-lo, defina o valor do atributo localOnly como true, para que o output possa ser visualizado somente no computado onde esta sendo executado a aplicação.
  4. Bem galerinhas, por enquanto é isso, é claro que ainda existe muita coisa pra melhorar o desempenho de uma aplicação web bem como torná-la segura, mas por hora deixaremos só isso ai, espero comentários e mais comentários com boas práticas utilizadas por vocês e espero ter ajudado.

Grande Abraço!

Atenciosamente,
Bruno Castrillon
Community Leader.

Visão Geral de Aplicações em N Camadas (Parte I – Teórico)

Categoria: ASP.Net, Arquitetura, Desenv. Enterprise, Desenv. Web, Desenv. Windows, Melhores Práticas, Microsoft Solutions, Windows Cliente

Olá membros e visitantes, eu pretendo escrever artigos básicos, intermediários e avançado, porém, para chegarmos até os artigos intermediários e avançados precisamos de alguns conhecimentos básicos, este é um artigo teórico e espero que gostem do assunto, fique a vontade para perguntas nos comentários.

Neste meu segundo artigo inicio escrevendo sobre desenvolvimento de aplicações em camadas. O desenvolvimento em N camadas também pode ser chamada de “aplicativos distribuidos” ou ainda “aplicativos multicamadas” o que oferece como principais vantagens: manutenibilidade e escalabilidade ao seu aplicativo.

O que é isso?
Manutenibilidade é a facilidade de manter ou armazenar alguma coisa, segundo o wiktionary.org
Escalabilidade é a facilidade em manipular uma determinada parte de um todo, também retirado de wikipedia.org

Então como isso funciona?
O desenvolvimento em camadas é separar seu aplicativo em partes visando o processamento destas, para ser distribuido em cliente/servidor, podendo – obviamente – ser em vários servidores. Em geral os aplicativos são construidos em 3 camadas, comumente conhecidas como: Presentation (Apresentação – Interface do Usuário (UI)), Business (Negócios) e Data Access (Acesso a Dados – DAL):

  •  Apresentação (UI): é a camada – layer – de disposição dos dados para o usuário, ou seja, como a informação é apresentada para o usuário.
  • Negócios: é a camada responsável pelas regras de negócios do aplicativo, ou seja, o código de manipulação/transformação de dados.
  • Acesso a Dados: é a camada responsável por recuperar os dados do banco de dados, ou seja, faz a conexão com o banco, executa as transações com o banco de dados e gerencia as conexões.
    Essas são praticamente as camadas obrigatórias para seu aplicativo.

E como funciona tudo isso na hora de programar?
Quando pensamos desenvolver em N camadas, o jeito mais fácil de criar este ambiente é dividir suas camadas em projetos distintos dentro de uma única solução, isto vale para qualquer ferramenta, neste artigo – óbvio – estarei usando o Visual Studio. Dentro do Visual Studio temos vários recursos para nos ajudar no processo de criação desta arquitetura:

  • DataSet Designer: no qual oferece uma propriedade chamada DataSet Project para que você possa separar o DataSet (camada com contém as entidade de dados) do TableAdapters (camda de acesso a dados) em projetos distintos, manténdo assim adivisão em camadas.
     veja mais em http://msdn.microsoft.com/pt-br/library/314t4see.aspx
  • LINQ to SQL oferece o método Attach que permite que você reuna o DataContext de diferentes camadas em um único aplicativo, o que é altamente recomendado para projetos com um modelo muito grande.
  • Entre outros.
    Vamos então detalhar mais sobre as principais camadas apresentadas acima.

Camada de Apresentação (UI)

A camada de aresentação tem a única responsabilidade de montar a disposição da informação para o usuário, por isso é chamada de interface do usuário (UI), esse camada de se comunica com a camada intermediária para chamar as métodos e funções.

Camada Intermediária

A Camada intermediária é a camada que faz a ponte da camada de apresentação e a camada de dados, porém, essa não é a única responsabilidade desta camada, pois, dentro desta camada é onde fica a regra de negócios da aplicação, como por exemplo: cálculos financeiros, verificações condicionais, regras de validação, etc. Onde podemos ter nesse intermédio N camadas, especificando ainda mais as funções.

Camada de Acesso a Dados

A camada de dados é tem a responsabilidade de executar as consultas/alterações no banco de dados, essa camada que inicia a conexão, executa o procedimento e fecha a conexão com o banco. 

Como esse artigo tem o objetivo de ser completamente teórico fica para a segunda parte iniciarmos este cenário dentro do Visual Studio 2008/2010, usando LINQ e Entity Framework.

Espero ter contribuido com conhecimento a todos, não deixe de comentar e clicar nos meus anúncios adsense do google.
Atenciosamente,
Ricardo M Machado
MCT, MCITP, MCTS – Community Leader.

Referências:
http://msdn.microsoft.com/pt-br/library/bb384398.aspx

Links Relatcionados:
http://msdn.microsoft.com/pt-br/library/314t4see.aspx
http://msdn.microsoft.com/pt-br/library/bb882661(en-us).aspx
http://msdn.microsoft.com/pt-br/library/bb384570.aspx

Switch to our mobile site