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.

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.

Switch to our mobile site