Novidades do ASP.NET 4.0, ClientIDMode

Entre as novidades do ASP.NET 4.0 está o ClientIDMode, que é uma propriedade que altera a forma com que o ClientID do controle é renderizado na página, trazendo duas novas formas de escrever os id’s na página.

Essa propriedade tona mais fácil o uso de client script para manipular elementos html’s que são renderizados por controles ASP.NET.

O ClientIDMode pode ser configurado de três formas diferentes, alterando a maneira de como o ClientID é renderizado na página:

  • AutoID, opção default da propriedade (caso a propriedade ClientIDMode não seja escolhida, essa será a utilizada), renderiza na página id’s como nas versõs anteriores do ASP.NET.
  • StaticID, usa o ID como ele é escrito, ou seja o ClientID será igual o ID do controle.
  • Predictable, deve ser utilizado em controles de dados, como o ListView, ele concatena os ID’s dos containers em que o controle se encontra, com o id do próprio controle junto de um número sequencial. Esse número sequencial pode ser controlado pelo ASP.NET, ao utilizar uma propriedade chamada ClientIDRowSuffix que altera esse sufixo para um valor vindo da coleção de dados.

Exemplos:

C# (carregando ListView)

Pessoa p1 = new Pessoa() { Nome = "Rodolfo", Codigo = 30 };
Pessoa p2 = new Pessoa() { Nome = "Fadino", Codigo = 35 };
Pessoa p3 = new Pessoa() { Nome = "Junior", Codigo = 40 };
List<Pessoa> pessoas = new List<Pessoa>();
pessoas.Add(p1);
pessoas.Add(p2);
pessoas.Add(p3);

lstTeste.DataSource = pessoas;
lstTeste.DataBind();

AutoID:

<asp:ListView ID="lstTeste" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblNome" runat="server" Text='<%#Eval("Nome") %>'>
        </asp:Label>
    </ItemTemplate>
</asp:ListView>

renderizará

<span id="MainContent_lstTeste_lblNome_0">Rodolfo</span>
<span id="MainContent_lstTeste_lblNome_1">Fadino</span>
<span id="MainContent_lstTeste_lblNome_2">Junior</span>

StaticID:

<asp:ListView ID="lstTeste" ClientIDMode="Static" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblNome" runat="server" Text='<%#Eval("Nome") %>'></asp:Label>
    </ItemTemplate>
</asp:ListView>

renderizará

<span id="lblNome">Rodolfo</span>
<span id="lblNome">Fadino</span>
<span id="lblNome">Junior</span>

Predictable:

<asp:ListView ID="lstTeste" ClientIDMode="Predictable"
ClientIDRowSuffix="Codigo" runat="server">
    <ItemTemplate>
        <asp:Label ID="lblNome" runat="server" Text='<%#Eval("Nome") %>'></asp:Label>
    </ItemTemplate>
</asp:ListView>

renderizará

<span id="MainContent_lstTeste_lblNome_30">Rodolfo</span>
<span id="MainContent_lstTeste_lblNome_35">Fadino</span>
<span id="MainContent_lstTeste_lblNome_40">Junior</span>

Como vocês podem ver ele utilizou como sufixo a propriedade “Codigo” da minha coleção de pessoas.

Neste exemplo também mostro outra novidade do ASP.NET 4.0, agora não é mais preciso definir LayoutTemplate para o controle ListView.

Espero que este post seja útil,

estou a disposição para dúvidas, críticas e sugestão.

Rodolfo

Posted in ASP.NET | Tagged , | Leave a comment

C# boas práticas switch

Boa noite a todos, em nossos sistemas e projetos estamos sempre em busca da melhor maneira de desenvolver e codificar (pelo menos deveriamos).

O conteúdo de uma palestra (Alfred Myers) que eu assisiti no Codificando2010 veio ao encontro com um tópico que eu estava estudando para uma prova de certificação (passei, .NET Framework, Application Development Foundation).

A palestra falava sobre dicas, truques e boas práticas de programação, já o capitulo do livo falava sobre como utilizar o switch em C#.

Como utilizar o switch?

A preocupação que devemos ter ao utilizar o switch é sempre termos uma opção default para suas condições e nela definir a melhor maneira de agir caso nenhuma das condições anteriores sejam chamadas.

Exemplo:

temos um enum de tipos de impressora

uma excessão de impressora inválida

e por último uma classe de impressão

Veja que existe a possibilidade de mais um tipo de impressora ser criada no Enum e o Switch não ter a opção dela.

Neste caso sem uma opção default iria causar um erro direto, entretando ao utilizarmos sempre uma opção default temos a chance de trabalhar da melhor forma como queremos tratar essa falta da opção.

Como tratamento nesse exempo eu dei duas sugestões:

  1. Imprimir em uma impressora generica;
  2. Disparar(throw) uma excessão do tipo ImpressoraInvalida que o nível acima deve tratar;

Com isso, utilizando sempre uma opção default podemos ter um maior controle e uma maior qualidade em nossos projetos.

Obrigado,

Rodolfo

Posted in C#, Desenvolvimento | Tagged , | Leave a comment

Dica: SQL Server Sample Databases

Várias vezes precisamos de um database como exemplo para fazer testes, utilizar como exemplo em post, palestras.
Fica a dica do link para: SQL Server Sample Databases.

no site podemos encontrar Databases para:

  • SQL Server 2008R2
  • SQL Azure
  • SQL Server 2008
  • SQL Server 2005

Link: http://msftdbprodsamples.codeplex.com/

Posted in SQL | Tagged | Leave a comment