<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2307134333701116373</id><updated>2012-01-30T14:15:47.628-08:00</updated><category term='state management'/><category term='Globalization'/><category term='Visual Studio'/><category term='capítulo 1'/><category term='Microsoft'/><category term='RadioButton'/><category term='Button'/><category term='Calendar'/><category term='Image'/><category term='validators'/><category term='ASP.NET C# VB.NET JQuery quintelab ajax json'/><category term='#microsoft #spammer #hotmail'/><category term='7'/><category term='Privacidade'/><category term='Windows'/><category term='Wizard'/><category term='Mídia Social'/><category term='Seven'/><category term='RegularExpressionValidator'/><category term='c#'/><category term='Xml'/><category term='controles'/><category term='ImageButton'/><category term='Resources'/><category term='RequiredFieldValidator'/><category term='sessões'/><category term='internet'/><category term='asp.net 4'/><category term='Web Parts'/><category term='.net'/><category term='access'/><category term='TextBox'/><category term='CompareValidator'/><category term='GodMode'/><category term='web.config'/><category term='asp'/><category term='Literal'/><category term='silverlight 4'/><category term='Temas'/><category term='Hidden Fields'/><category term='IIS 7.5'/><category term='ASP.NET C# VB.NET JQuery quintelab'/><category term='lição 2'/><category term='controls'/><category term='64bits'/><category term='Localization'/><category term='View State'/><category term='MultiView'/><category term='CustomValidator'/><category term='Segurança'/><category term='ListBox'/><category term='Query Strings'/><category term='validação'/><category term='certificação'/><category term='cópia'/><category term='Theme'/><category term='Google'/><category term='Master Page'/><category term='CheckBox'/><category term='Panel'/><category term='RangeValidator'/><category term='Table'/><category term='skin'/><category term='Validation Controls'/><category term='FileUpload'/><category term='asp.net'/><category term='Orkut'/><category term='DropDownList'/><category term='Cookies'/><category term='Firefox Beta 3.6'/><category term='ImageMap'/><category term='mozilla firefox'/><category term='certificação asp.net 4'/><category term='Label'/><category term='Plágio'/><title type='text'>ASP.NET ::  C# :: VB.NET :: quintelab</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-1337599341078721226</id><published>2012-01-30T14:15:00.000-08:00</published><updated>2012-01-30T14:15:47.642-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Localization'/><category scheme='http://www.blogger.com/atom/ns#' term='Globalization'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><title type='text'>Capítulo 6: Globalization and Accessibility Lição 1: Configuring Globalization and Localization</title><content type='html'>A maioria dos sites são desenvolvidos para uma só língua e cultura, entretanto o site pode ser acessado por pessoas em diversos países que falam diferentes línguas. Os desenvolvedores igoram esta larga audiência. O asp.net permite você desenvolver de forma que consiga atingir essas pessoas, salvando os textos dos seus sites em arquivos de recursos, separando por língua ou cultura.&lt;br /&gt;&lt;br /&gt;Será criado um arquivo de recurso para cada linguagem que seu site irá suportar, no momento em que o usuário acessar o site, o asp.net irá verificar através da requisição do usuário qual sua língua e escolher o arquivo de recurso ideal para o usuário, caso seu site não suporte a cultura do usuário, será escolhido um arquivo de recurso padrão para fornecer o resultado.&lt;br /&gt;&lt;br /&gt;Outro ponto importante é &lt;b&gt;acessibilidade&lt;/b&gt;. Isso significa que seu site suporta diferentes tipos de visualização e entrada de dispositivos. Utilizando os recursos da acessibilidade todos os usuários irão se beneficiar ao acessar seu site.&lt;br /&gt;&lt;br /&gt;O asp.net possui importantes ferramentas para conseguir atingir seus objetivos tanto com globalização e acessibilidade.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Lesson 1: Configuring Globalization and Localization&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Existem aplicações web seja de intranet, seja aplicativos de multinacionais que necessitam atingir um público alvo amplo de diferentes países. Para esses casos o asp.net disponibiliza ferramentas para que seu site se adeque a língua e cultura do usuário que esta acessando.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;About ASP.NET Resources&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para exibir uma página asp.net que suporte diferentes linguagens, você pode solicitar a língua que o usuário utiliza e escrever linhas de códigos para modificar todo seu texto, porém isto será custoso e complexo e irá requerer que uma pessoa que não seja desenvolvedora mexa no seu código. Claro que esta não é a melhor solução. Você pode externaliza seu texto, ou seja, deixa-lo separado do seu código fonte, e decidir em tempo de execução qual texto é o mais apropriado para ser exibido.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O Asp.net utiliza arquivos de recursos que suportam múltiplas linguagens. Um arquivo de recurso contém uma lingua especifica para ser exibida em uma página ou site. Sua página irá exibir o arquivo de recurso baseado na requisição do usuário, utilizando definições de sua máquina ou configurações do navegador.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Existem dois tipos de arquivos de recursos no asp.net: &lt;b&gt;Local&lt;/b&gt; e &lt;b&gt;Global&lt;/b&gt;. Arquivos Locais são especificos para uma página. Arquivos Globais são compartilhados por todo o site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using Local Resource Files&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Um arquivo de recurso local é especifico para uma página web. Arquivos de Recursos locais devem ser armazenados dentro de uma pasta especial chamada &lt;b&gt;App_LocalResources&lt;/b&gt;. Esta pasta pode estar na raíz ou dentro de outras pastas do seu projeto. Caso seu site contenha várias páginas, o ideal é criar uma sub-pasta &lt;b&gt;App_LocalResources&lt;/b&gt; dentro de cada pasta.&lt;br /&gt;&lt;br /&gt;Como o arquivo local é especifico para uma página você deve nomeá-lo com o nome da página mais a extensão &lt;b&gt;.resx&lt;/b&gt;. Por exemplo se você tiver a página Home.aspx o arquivo de recurso padrão deve ter o nome Home.aspx.resx. Este será o arquivo padrão, caso seu site não possua a linguagem requisitada pelo usuário este arquivo será utilizado.&lt;br /&gt;&lt;br /&gt;Você deve criar um arquivo específico para cada linguagem que seu site irá suportar. O nome desse arquivo deve ser o nome do arquivo padrão mais a informação da linguagem específica. Por exemplo, se você criar um arquivo para a linguagem abranger o &lt;b&gt;espanhol&lt;/b&gt;, o arquivo de recurso da página Default.aspx deve ser &lt;b&gt;Default.aspx.es.resx&lt;/b&gt; onde "es" é abreviação de Spanish. Se for criar para o alemão, deve ser, &lt;b&gt;Default.aspx.de.resx&lt;/b&gt; onde "de" representa German.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Culture-Specific Local Resources&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;No desenvolvimento asp.net o termo &lt;b&gt;culture (cultura&lt;/b&gt;) refere-se a linguagens regionais e diferenças de formatos. Exemplo, o Inglês falado nos Estados Unidos, é diferente do Inglês falado na Inglaterra e na Austrália ou outras partes do mundo. Cada país ou região pode ter um padrão diferente de formato de moeda, data ou número. Nos Estados Unidos por exemplo o número é formatado da seguinte forma: 12,345.67, já em algumas partes da Europa a vírgula e o ponto são invertidos: 12.345,67.&lt;br /&gt;&lt;br /&gt;Quando uma requisição de cultura específica for feita o FrameWork irá ajustar conforme a necessidade. Você só precisa criar arquivos de recursos específicos.&lt;br /&gt;&lt;br /&gt;Para atender diferentes culturas, como por exemplo ter textos diferentes para o Espanhol falado na Espanha e o Espanhol falado no México, basta criar o arquivo com o seguinte formato: &lt;b&gt;PageName.aspx.languageId-cultureId.resx&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Exemplo, caso queria ter um texto diferenciado para o Espanhol falado no México (mx) precisa criar um arquivo: Home.aspx.es-mx.resx; Já para o Espanhol falado no restante do mundo basta: Home.aspx.es.resx.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Examining the Contents of a Resource File&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O arquivo de recurso no Asp.Net é um arquivo xml com um conjunto de pares com chave e valor. A chave é única e é usada para definir e referenciar o resource. Já o valor (claro) é o valor retornado pela chave. O seguinte código é um exemplo de um chave em um arquivo de recurso:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;data name="PageResource1.Title" xml:space="preserve"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;value&amp;gt;Customer Lookup&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/data&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Neste exemplo observe que a chave é &lt;b&gt;PageResource1.Title &lt;/b&gt;e o valor é &lt;b&gt;Customer Lookup&lt;/b&gt;.&lt;br /&gt;O Visual Studio possui uma ferramenta própria para edição, porém caso precise ou queria pode editar seu arquivo de recurso através de algum editor Xml.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Generating Local Resources&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Você pode utilizar o Visual Studio para gerar automaticamente um arquivo de recurso local para sua página. Este procedimento irá exportar para o arquivo as propriedades baseadas em textos dos controles dessa página. Para executar este procedimento, siga os passsos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Abra sua página no Visual Studio;&lt;/li&gt;&lt;li&gt;Vá até o menu &lt;b&gt;Tools-Generate Local Resource&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;O Visual Studio irá fazer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Criar a pasta &lt;b&gt;App_LocalResources&lt;/b&gt; se for necessário;&lt;/li&gt;&lt;li&gt;Gerar um arquivo baseado em Xml, que será seu arquivo local de recursos. Ele irá conter as propriedades de sua página e de seus controles, propriedades como Text, ToolTip, Title e Caption).&lt;/li&gt;&lt;/ul&gt;Veja a imagem de exemplo, uma página que possui um TextBox, um Calendar e controles Button. Repare no menu:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_g5qWS2rEFI/Tt1GLIOhSuI/AAAAAAAAAGs/LrD0m818DXo/s1600/menuGenerate.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-_g5qWS2rEFI/Tt1GLIOhSuI/AAAAAAAAAGs/LrD0m818DXo/s400/menuGenerate.png" width="400" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-vqFxaOG6kuY/Tt1HAsYvUTI/AAAAAAAAAG0/Ihnhb9omB_A/s1600/resourcegerado.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_g5qWS2rEFI/Tt1GLIOhSuI/AAAAAAAAAGs/LrD0m818DXo/s1600/menuGenerate.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Depois de clicar na opção. O Visual Studio irá gerar um arquivo de recurso com as propriedades exportadas de sua página e controles. Este arquivo irá ser nomeado com o nome de sua página mais a extensão &lt;b&gt;.resx&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Observe na próxima figura o arquivo gerado, repare que foram exportadas as propriedades com seus valores que estavam informados.&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vqFxaOG6kuY/Tt1HAsYvUTI/AAAAAAAAAG0/Ihnhb9omB_A/s1600/resourcegerado.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-vqFxaOG6kuY/Tt1HAsYvUTI/AAAAAAAAAG0/Ihnhb9omB_A/s320/resourcegerado.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Localizing Text Outside of Controls&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Lembre-se que o Visual Studio não gera recursos para todo o texto de sua página, ele apenas irá gerar para os controles que possuem a propriedade Text. Verifique pela figura anterior que vários itens de texto não foram exportados para o arquivo de recurso, isto é por que as propriedades não estavam preenchidas. Esta é a única preocupação que precisa ter quando for criar seus arquivos de recursos.&lt;br /&gt;&lt;br /&gt;Se você possui textos em sua página que necessitam utilizar recursos de localização, é melhor utilizar algum controle que exiba este texto do que utilizar apenas marcadores html. O ASP.NET possui te da duas opções de controles para esta tarefa. O primeiro é o controle &amp;lt;asp:Localize&amp;gt;. Este controle não irá gerar nenhum código na sua página quando exibida, ele só trabalha para localizar textos que estão fora de controles. Outro controle que pode ser usado é o &amp;lt;asp:Label&amp;gt; que trabalha de forma parecida. Veja como fica o código do controle&amp;nbsp;&amp;lt;asp:Localize&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:Localize ID="LabelTitle" runat="server" Text="Customer Lookup"&amp;nbsp;meta:resourcekey="LabelTitleResource1"&amp;gt;&amp;lt;/asp:Localize&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Attaching Controls and Resources Implicitly&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Quando o Visual studio gera o arquivo de resource, ele automaticamente altera o código aspx adicionando a&amp;nbsp;meta:resourcekey como atributos ao controle específico. Em tempo de execução o ASP.NET procura um valor para este item no arquivo de recurso com base nessa chave.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Isto é uma localização implícita, utilizando o padrão &lt;b&gt;Key.Property&lt;/b&gt;&amp;nbsp;onde o é definido que a chave é o nome do controle e a propriedade é a propriedade do controle como&amp;nbsp;ButtonFind.Text ou ButtonFindResource1.Text.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O código a seguir mostra um exemplo no botão Find, após sua propriedade &lt;b&gt;Text &lt;/b&gt;ser exteriorizada em um recurso implicito.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:Button ID="ButtonFind" runat="server" Text="Find" CssClass="submitButton"&amp;nbsp;meta:resourcekey="ButtonFindResource1" /&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;O ASP.NET irá utilizar a chave&amp;nbsp;&lt;b&gt;meta:resourcekey&lt;/b&gt;&amp;nbsp;para procurar no arquivo de recurso a mesma chave para substituir o valor da propriedade Text do botão.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Você pode usar este mesmo método de nomenclatura quando utilizar arquivo de recursos e fazer todo o processo manualmente. Isso é importante porque muitas vezes você irá adicionar ou mudar um controle de uma página após ter gerado o arquivo de recurso. E o Visual Studio não irá tentar manter em sincronia o arquivo de recurso. Portanto é importante você gerar seus arquivos de recursos com base em um dos passos anteriores.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Attaching Controls and Resources Explicitly&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: -webkit-auto;"&gt;O modelo&amp;nbsp;implícito&amp;nbsp;discutido anteriormente trabalha monta a combinação dos valores da propriedade com o recurso automaticamente com base na convençã&lt;span style="font-family: inherit;"&gt;o (Key.Property). Mas existe a opção de fazer esta combinação explicitamente. O código a seguir mostra como fica para definir a propriedade Text com um valor vindo de um recurso.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;/div&gt;&lt;i&gt;&amp;lt;asp:Button ID="ButtonFind" runat="server" CssClass="submitButton"&amp;nbsp;Text="&amp;lt;%$ Resources:, ButtonFindResource1.Text %&amp;gt;" /&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Quando optar pela foma explícita você sempre precisará informar qual a chave do recurso corresponde a propriedade do controle. Portanto, basta criar seu arquivo de recurso, adicionar o recurso e associar a seu controle.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Creating Language-Specific Local Resources&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Quando pretende utilizar diversas linguagens e culturas em seu site, o primeiro passo é criar o arquivo de recurso padrão. Para criar o arquivo de recurso para outros idiomas, você deve copiar seguir os seguintes passsos:&lt;br /&gt;&lt;br /&gt;1º No Solution Explorer, clique em Copiar no arquivo padrão.&lt;br /&gt;2º Vá na pasta &lt;b&gt;App_LocalResources &lt;/b&gt;e clique em Colar.&lt;br /&gt;3º Renomeie seu novo arquivo incluindo a linguagem e a cultura antes da extensão do arquivo. Por exemplo para um arquivo que irá dar suporte ao Francês, o nome do arquivo deve ficar:&amp;nbsp;&lt;b&gt;CustomerLookup.aspx.fr.resx &lt;/b&gt;onde &lt;b&gt;fr &lt;/b&gt;é a abreviação para Francês.&lt;br /&gt;4º De um cliquei duplo no arquivo e altere os valores dos recursos para os valores correspondentes a linguagem.&lt;br /&gt;&lt;br /&gt;Você deve repetir esses passos para criar o arquivo para suportar outras linguagens.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Testing Resource Files for Other Cultures&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para executar testes em seu aplicativo utilizando outras linguagens, basta alterar a linguagem padrão de sua máquina, mudando esta propriedade automaticamente quando acessar seu site o navegador irá verificar esta propriedade e enviar para o ASP.Net.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Using Global Resources&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Um recurso Global é utilizado quando você precisa que este recurso seja lido por várias páginas do seu site. Um recurso Global não é utilizado para uma página específica.&lt;br /&gt;&lt;br /&gt;Ele segue praticamente as mesas regras dos recursos locais, ele é um arquivo&amp;nbsp;.resx. Você precisa criar um arquivo padrão e arquivos para as linguagens que pretende dar suporte e manter a mesma regra referente aos nomes dos arquivos. Entretanto, um arquivo de recurso Global fica salvo na pasta&amp;nbsp;&lt;b&gt;App_GlobalResources &lt;/b&gt;na raíz da aplicação. O ASP.NET sempre irá gerar objetos que facilitam a utilização desses recursos de forma simples. Uma diferença é que os recursos globais só podem ser usados explicitamente e nunca implicitamente.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Creating Global Resources&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para criar um recurso global você deve iniciar criando o arquivo e armazenando na pasta&amp;nbsp;App_GlobalResources. Neste arquivo você deve preencher todo recurso que será compartilhado entre as páginas. Para criar um arquivo de recurso global, siga os passos:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Clique com o botão direito na Solution Explorer. Selecione,&amp;nbsp;Add ASP.NET Folder e em seguida&amp;nbsp;App_GlobalResources. Ele irá criar a pasta na raíz do seu projeto.&lt;/li&gt;&lt;li&gt;Clique com o botão direito na pasta&amp;nbsp;App_GlobalResources e selecione&amp;nbsp;Add New Item.&lt;/li&gt;&lt;li&gt;Na caixa de diálogo que abrir, selecione&amp;nbsp;Resource File. Defina um nome para seu arquivo seguida da extensão&amp;nbsp;.resx.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Do passo anterior em diante, segue o mesmo padrão do arquivo local. Você deve abrir o arquivo para criar seus recursos. E este será seu arquivo padrão, você deve criar outros arquivos para dar suporte as cultuas que deseja.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Attaching Control Properties to Global Resources&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Após criar o arquivo de recurso Global, você pode associar explicitamente as propriedades dos controles aos recursos. No caso do recurso global, se você possuir uma Label que exibe uma mensagem de saudação em todas páginas, basta você criar este recurso uma única vez e utilizá-lo em todas as páginas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para associar as propriedade dos controles ao recurso no modo de design, você pode usar a propriedade Expressions. Veja como:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Abre a página no modo de design do Visual Studio e abra a aba propriedades de um controle;&lt;/li&gt;&lt;li&gt;Selecione a propriedade&amp;nbsp;&lt;b&gt;Expressions &lt;/b&gt;que está na categoria &lt;b&gt;Data&lt;/b&gt;. Clique no botão com 3 pontos (...) para abrir a caixa de diálogo.&lt;/li&gt;&lt;li&gt;Selecione a propriedade que deseja associar ao recurso;&lt;/li&gt;&lt;li&gt;Na lista de tipo de expressão, selecione&amp;nbsp;Resources;&lt;/li&gt;&lt;li&gt;Na chave &lt;b&gt;ResourceKey&lt;/b&gt;&amp;nbsp;selecione a propriedade correspondente e clique em OK, veja na imagem:&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4qqZRNJW4Tg/Tx3eCPh66fI/AAAAAAAAAHI/3Sodzmr_Yr8/s1600/GlobalResource.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-4qqZRNJW4Tg/Tx3eCPh66fI/AAAAAAAAAHI/3Sodzmr_Yr8/s400/GlobalResource.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Esses passos farão que o Visual Studio mostre o valor do recurso padrão no modo de design e quando a página for aberta pelo usuário irá mostrar conforme as definições dele. No código aspx o visual studio cria o código necessário para fazer esta ligação explicita com o recurso, veja como fica:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;&amp;lt;asp:Label ID="LocalizeWelcome"&amp;nbsp;Text="&amp;lt;%$ Resources:SharedLocalizedText, WelcomeString %&amp;gt;" runat="server"&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Accessing Resource Values Programmatically&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;O ASP.NET cria objetos que permite que você acesse os recursos através da programação, usando a sintaxe&amp;nbsp;&lt;b&gt;Resources.ResourceFilename.Resource&lt;/b&gt;. Esta é uma classe fortemente tipada do objeto&amp;nbsp;&amp;nbsp;Resources.Resource para cada arquivo de recurso global. Esta classe é criada com base no nome do arquivo menos sua extensão.&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;Cada recurso se torna um membro da classe. Por exemplo para acessar o recurso&amp;nbsp;&lt;b&gt;WelcomeString&lt;/b&gt;&amp;nbsp;que esta dentro do arquivo&amp;nbsp;&lt;b&gt;SharedLocalizedText&lt;/b&gt;&amp;nbsp;você programar da seguinte forma:&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;LabelLocalizedWelcome.Text = Resources.SharedLocalizedText.WelcomeString;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;O código anterior é quando você já possui seu arquivo criado em modo de design, quando você cria este arquivo em tempo de execução você pode acessá-lo através dos métodos&amp;nbsp;&lt;b&gt;GetLocalResourceObject&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;GetGlobalResourceObject. &lt;/b&gt;Veja como fica:&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;Button1.Text = GetLocalResourceObject("Button1.Text").ToString();&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;Image1.ImageUrl = (String)GetGlobalResourceObject("WebResourcesGlobal", "LogoUrl");&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;HTML Layout Best Practices&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;Globalização pode ser simples como substituir um texto pelo texto da outra linguagem, formatando os números e símbolos. Entretanto algumas línguas como a língua&amp;nbsp;Árabe requer um layout diferente pois os textos são da direita pra esquerda. Quando quiser permitir que seu site de suporte a linguagens de culturas variadas, siga as seguintes diretrizes:&lt;/div&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Evite utilizar posicionamento absoluto e tamanhos definidos para os controles&lt;/b&gt;: ao invés de definir os tamanhos em pixels nos controles, deixe que o navegador controle isso, para fazer isso não utilize posição absoluta nem tamanhos fixos.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Utilize a altura e largura dos formulários&lt;/b&gt;: devido essas línguas terem mais ou menos letras para escrever uma palavra ou frase, você não deve definir em pixels os tamanhos dos controles, utiliza porcentagem. Ex.:&amp;nbsp;&lt;i&gt;&amp;lt;table width="100%"&amp;gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Defina os tamanhos dos controle em relação ao tamanho total do formulário: &lt;/b&gt;Quando precisar definir o tamanho de um controle utilize tamanhos proporcionais ao formulário. Você pode fazer isso utilizando expressões de folha de estilo. Ex.: &amp;nbsp;&lt;i&gt;&amp;lt;div style='height: expression(document.body.clientHeight / 2);&amp;nbsp;width: expression(document.body.clientWidth / 2); '&amp;gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Utilize células para cada controles: &lt;/b&gt;isso irá permitir que o texto seja moldado e garante o alinhamento entre as colunas mesmo com diferentes línguas.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Evite utilizar a propriedade&amp;nbsp;NoWrap nas tabelas: &lt;/b&gt;não permita a quebra de linha, pois isso pode funcionar na língua nativa, mas não em outras línguas.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Evite especificar a propriedade&amp;nbsp;Align nas tabelas: &lt;/b&gt;definindo um alinhamento da esquerda pra direita poderá substituir o layout em culturas que utilizam o texto da direita pra esquerda.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Desassocie controles RadioButton e CheckBox do texto:&lt;/b&gt;&amp;nbsp;separando o texto em células separadas do controle permite que o texto seja moldado quando for necessário um texto maior quando for traduzido.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Em resumo quanto menos deixar fixo os tamanhos dos controles de sua página, mais fácil ficará adaptar para outras línguas, pois quem ficará responsável por esta tarefa é o navegador.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Setting the Culture&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Normalmente utiliza-se as preferências do usuário que esta definida nas configurações do browser. Porém é interessante permitir ao usuário que modifique esta opção manualmente. Pode acontecer de um turista estar utilizando um computador público em outro país e prefere ver o site na língua nativa dele.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Você deve exibir para ele uma forma de trocar a língua. Quando o usuário mudar esta configuração você deve salvar em um cookie, sessão ou algo similar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nas páginas ASP.NET existem 2 propriedades para definir a linguagem e a cultura:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Culture:&lt;/b&gt;&amp;nbsp;este objeto determina os resultados de funções que são dependentes da cultura, como formatações de data, moeda e número. Definindo uma cultura específica, você define tanto a linguagem como a formatação regional, tais como&amp;nbsp;&lt;b&gt;es-MX&lt;/b&gt; ou &lt;b&gt;fr-FR&lt;/b&gt;. Você não pode definir objetos de cultura neutra que define apenas a linguagem, tais como&amp;nbsp;&lt;b&gt;es&lt;/b&gt; ou &lt;b&gt;fr&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;UICulture: &lt;/b&gt;esta propriedade determina os recursos globais e locais que serão carregados. Nesta propriedade você pode definir culturas neutras.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: -webkit-auto;"&gt;Você define as propriedade&amp;nbsp;&lt;b&gt;Culture &lt;/b&gt;e&amp;nbsp;&lt;b&gt;UICulture&lt;/b&gt;&amp;nbsp;sobrescrevendo&amp;nbsp;o &lt;span style="font-family: inherit;"&gt;métod&lt;span style="color: #333333;"&gt;o&amp;nbsp;&lt;/span&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;b&gt;InitializeCulture&lt;/b&gt;&amp;nbsp;da página. O código a seguir mostra como definir essas propriedades com o valor vindo de um dropdownlist.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;protected override void InitializeCulture()&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; if (Request.Form["DropDownList1"] != null)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; &amp;nbsp; //define the language&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; &amp;nbsp; UICulture = Request.Form["DropDownList1"];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; &amp;nbsp; //define the formatting (requires a specific culture)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; &amp;nbsp; Culture = Request.Form["DropDownList1"];&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&amp;nbsp; base.InitializeCulture();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic; text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;O correto é você fornecer ao usuário uma lista das linguagens que você suporta em seu site. Porém você tem a opção de recuperar todas as culturas disponíveis chamando o método&amp;nbsp;&lt;b&gt;System.Globalization.CultureInfo.GetCultures&lt;/b&gt;. Este método retorna um Enumerador do tipo&amp;nbsp;CultureTypes que especifica um subconjunto de culturas disponíveis. Os valores mais utilizados são:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;b&gt;AllCultures&lt;/b&gt;: esta lista todas as culturas disponíveis no framework, tanto culturas específicas como neutras.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;li&gt;&lt;b&gt;NeutralCultures&lt;/b&gt;: fornece somente a língua e não configurações regionais.&lt;/li&gt;&lt;li&gt;&lt;b&gt;SpecificCultures&lt;/b&gt;: fornece tanto a língua como definições de configurações regionais.&lt;/li&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Setting Culture Declaratively at the Page or Site Level&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="text-align: left;"&gt;&lt;span style="color: #333333;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: #333333;"&gt;Você pode definir a cultura tanto do website como somente de uma página. Para definir a cultura do website, adicione a seção&amp;nbsp;&lt;i&gt;&amp;lt;globalization&amp;gt; &lt;/i&gt;no arquivo web.config. Em seguida defina os atributos&amp;nbsp;&lt;b&gt;UICulture&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;Culture&lt;/b&gt;. Veja como:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;&lt;i&gt;&amp;lt;globalization uiculture="es" culture="es-MX" /&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;Para definir estes atributos somente para uma página você deve utilizar na diretiva @Page.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;&lt;i&gt;&amp;lt;%@ Page uiculture="es" culture="es-MX" %&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #333333;"&gt;Por padrão os valores atribuidos a essas propriedades é &lt;b&gt;auto&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-1337599341078721226?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/1337599341078721226/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2012/01/capitulo-6-globalization-and.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1337599341078721226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1337599341078721226'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2012/01/capitulo-6-globalization-and.html' title='Capítulo 6: Globalization and Accessibility Lição 1: Configuring Globalization and Localization'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_g5qWS2rEFI/Tt1GLIOhSuI/AAAAAAAAAGs/LrD0m818DXo/s72-c/menuGenerate.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-5076023869914236768</id><published>2011-11-28T14:53:00.000-08:00</published><updated>2011-11-28T14:58:23.487-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Parts'/><title type='text'>Capítulo 5: Input Validation and Site Navigation Lição 3: Using Web Parts</title><content type='html'>Muitos sites hoje possuem uma coleção de componentes que funcionam sozinhos e são auto-suficientes. Por exemplo, é padrão os sites serem divididos por uma barra lateral de navegação, uma barra no topo com o título, uma barra de rodapé, e uma área com notícias. Além disso muitos portais fornecem hoje componentes e relatórios como exemplo sobre o clima ou cotações financeiras.&lt;br /&gt;&lt;br /&gt;ASP.NET Web Parts permite ao desenvolvedor criar estes controles. Com estes controles o usuário do site pode escolher se quer visualizar um relatório na tela, ou tem a opção de remover este controle e adicionar outro de informação do clima. Você pode fornecer ao usuário do site uma coleção de controles, para ele definir qual informação ele quer exibir na página que ele esta visualizando.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;What Are Web Parts?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Web Part são componentes pré-definidos com funcionalidades que podem ser adicionados no site. Eles possuem uma estrutura definida, gerenciável e um modelo customizado. Alguns desses componentes podem ser movidos dentro do site para ser posicionado conforme a necessidade do usuário. A figura abaixo mostra um controle Web Part sendo posicionado pelo usário.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5m2bnRYjU60/TrhaMTazG3I/AAAAAAAAAFw/X2KhPhih79g/s1600/webPart1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-5m2bnRYjU60/TrhaMTazG3I/AAAAAAAAAFw/X2KhPhih79g/s400/webPart1.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Você pode utilizar o controle &lt;b&gt;CatalogZone&lt;/b&gt; para adicionar um catalogo de controles em sua página, onde o usuário pode adicionar e/ou remover controles Web Part das regiões pré-definidas. A figura abaixo exibe este cenário onde o usuário visualiza uma lista de controles que ele pode adicionar ou remover de sua página.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OM2PUgSVg8E/TrhbGVAMM1I/AAAAAAAAAF4/FB5YkFIIdKg/s1600/webPart2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://4.bp.blogspot.com/-OM2PUgSVg8E/TrhbGVAMM1I/AAAAAAAAAF4/FB5YkFIIdKg/s400/webPart2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;Páginas de Web Part podem oferecer ao usuário diversas opções de personalização, isso é ótimo quando você desenvolve funcionalidades que abrangem um público amplo. Veja alguns Web Parts comuns que você pode criar:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Uma lista de artigos e notícias&lt;/li&gt;&lt;li&gt;Um calendário com os eventos&lt;/li&gt;&lt;li&gt;Uma lista de WebSites&lt;/li&gt;&lt;li&gt;Uma caixa de pesquisa&lt;/li&gt;&lt;li&gt;Controles de Navegação&lt;/li&gt;&lt;li&gt;Blog&lt;/li&gt;&lt;li&gt;Leitores de RSS, etc...&lt;/li&gt;&lt;/ul&gt;Qualquer controle seja padrão ou controle personalizado pode se tornar um Web Part, e não necessariamente terá que escrever diversas linhas de código, pois o Visual Studio auxilia nesta tarefa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The WebParts Namespace&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O Asp.Net possui vários Web Parts, são 13 os controles disponíveis na ToolBox do Visual Studio. Esses controles e classes podem ser encontrados dentro da Namespace &lt;b&gt;System.Web.UI.WebControls.WebParts&lt;/b&gt;. Algumas dessas classes serão discutidas mais profundamente em lições posteriores. A lista a seguir contém as classes mais importantes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;WebPartManager&lt;/b&gt;: &lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;O controle&lt;/span&gt; &lt;span class="hps"&gt;WebPartManager&lt;/span&gt; &lt;span class="hps"&gt;é necessário em&lt;/span&gt; &lt;span class="hps"&gt;todas as páginas que&lt;/span&gt; &lt;span class="hps"&gt;inclui&lt;/span&gt; &lt;span class="hps"&gt;Web Parts.&lt;/span&gt; &lt;span class="hps"&gt;Ele não tem&lt;/span&gt; &lt;span class="hps"&gt;uma representação&lt;/span&gt; &lt;span class="hps"&gt;visual.&lt;/span&gt; &lt;span class="hps"&gt;Em vez disso,&lt;/span&gt; &lt;span class="hps"&gt;ele gerencia&lt;/span&gt; &lt;span class="hps"&gt;todos os controles&lt;/span&gt; &lt;span class="hps"&gt;de Web Parts&lt;/span&gt; &lt;span class="hps"&gt;e seus eventos&lt;/span&gt; &lt;span class="hps"&gt;na página&lt;/span&gt; &lt;span class="hps"&gt;especificada.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;&lt;b&gt;CatalogPart&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;O controle&lt;/span&gt; &lt;span class="hps"&gt;CatalogPart&lt;/span&gt; &lt;span class="hps"&gt;fornece&lt;/span&gt; &lt;span class="hps"&gt;a interface de usuário&lt;/span&gt;&amp;nbsp;&lt;span class="hps"&gt;para gerenciar&lt;/span&gt; &lt;span class="hps"&gt;um grupo de&lt;/span&gt; &lt;span class="hps"&gt;Web Parts que&lt;/span&gt; &lt;span class="hps"&gt;podem ser adicionados a&lt;/span&gt; &lt;span class="hps"&gt;uma página&lt;/span&gt; &lt;span class="hps"&gt;de Web Parts.&lt;/span&gt; &lt;span class="hps"&gt;Este grupo&lt;/span&gt; &lt;span class="hps"&gt;é normalmente&lt;/span&gt; &lt;span class="hps"&gt;todo o site&lt;/span&gt; &lt;span class="hps"&gt;(e não apenas&lt;/span&gt; &lt;span class="hps"&gt;específicos para&lt;/span&gt; &lt;span class="hps"&gt;uma determinada página&lt;/span&gt;&lt;span class=""&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class=""&gt;&lt;b&gt;PageCatalogPart&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;O controle&lt;/span&gt; &lt;span class="hps"&gt;PageCatalogPart&lt;/span&gt; &lt;span class="hps"&gt;é semelhante ao&lt;/span&gt; &lt;span class="hps"&gt;controle&lt;/span&gt; &lt;span class="hps"&gt;CatalogPart. No entanto &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;PageCatalogPart&lt;/span&gt;&lt;span class="hps"&gt; são apenas grupos dentro de uma página. Se um usuário fechar uma Web Parte ele pode utilizar o &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;PageCatalogPart para adicionar a Web Parte novamente a página.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;&lt;b&gt;EditorPart&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;O controle&lt;/span&gt; &lt;span class="hps"&gt;EditorPart&lt;/span&gt; &lt;span class="hps"&gt;permite aos usuários definir&lt;/span&gt; &lt;span class="hps"&gt;personalizações, como&lt;/span&gt; &lt;span class="hps"&gt;a modificação&lt;/span&gt; &lt;span class="hps"&gt;de propriedade&lt;/span&gt;&lt;span class=""&gt;s de uma Web Part &lt;/span&gt;&lt;span class="hps"&gt;especifica.&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps"&gt;&lt;/span&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;/span&gt;DeclarativeCatalogPart&lt;/b&gt;: Este controle permite você declarar quais controles Web Parte estão disponíveis para adicionar no site.&lt;/li&gt;&lt;li&gt;&lt;b&gt;WebPartZone&lt;/b&gt;: Controle utilizado para definir regiões que os controles Web Part podem ser hospedados.&lt;/li&gt;&lt;li&gt;&lt;b&gt;EditorZone&lt;/b&gt;: Controle que definir a região na página onde pode existir os controles EditorPart.&lt;/li&gt;&lt;li&gt;&lt;b&gt;CatalogZone&lt;/b&gt;: Defini uma região onde pode existir um controle CatalogPart.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Defining Web Part Zones&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Você adiciona Web Parts na página colocando-as em zonas. As &lt;b&gt;Zonas&lt;/b&gt; definem a área na página onde o usuário ou o desenvolvedor podem adicionar Web Parts. As zonas possuem as propriedades width, height e um local na página. É possível adicionar uma, nenhuma ou várias Web Parts dentro de uma zona. Veja a figura abaixo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZZ4ul6OhAy0/TrmpbyPTTvI/AAAAAAAAAGA/OUg2uGHgQhQ/s1600/WebPartZone.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="http://1.bp.blogspot.com/-ZZ4ul6OhAy0/TrmpbyPTTvI/AAAAAAAAAGA/OUg2uGHgQhQ/s400/WebPartZone.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As zonas permitem definir estilos que serão aplicados a todos Web Parts que estiverem dentro dela. Isto é chamado de &lt;b&gt;Web Part’s chrome&lt;/b&gt;. O &lt;b&gt;chrome &lt;/b&gt;(cromo)&lt;b&gt; &lt;/b&gt;inclui estilos de cabeçalho, estilos de menu, definições de borda e outros. As Web Parts que existiverem dentro de uma zona que teve seu chrome definido irá receber os mesmos estilos.&lt;br /&gt;&lt;br /&gt;Você cria zonas de Web Parts com o controle &lt;b&gt;WebPartZone&lt;/b&gt;. Este controle define a área onde podem ficar Web Parts, este controle também possui a propriedade &lt;b&gt;HeaderText&lt;/b&gt;. Nesta propriedade irá o texto que será exibido ao usuário quando a página e a zona estiverem em modo de edição.&lt;br /&gt;&lt;br /&gt;Para definir uma zona, você deve adicionar o controle WebPartZone em sua página, para adicionar controles a esta zona, primeiramente você deve adicionar o controle &lt;b&gt;ZoneTemplate&lt;/b&gt; dentro de sua WebPartZone, e dentro deo ZoneTemplate você adiciona os demais controles e combinações de sua Web Part. Veja o código:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:WebPartManager ID="WebPartManager1" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;/asp:WebPartManager&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:WebPartZone ID="WebPartZoneVendor" runat="server" HeaderText="Vendor Aggregate" style="width: 650px; height: auto"&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; &amp;lt;ZoneTemplate&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--Add content to the zone--&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/ZoneTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:WebPartZone&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Note nas primeiras linhas desse código a existência do controle &lt;b&gt;WebPartManager, &lt;/b&gt;apesar dele não ter uma representação visual para o usuário ele é obrigatório no uso de Web Parts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Creating Web Parts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Existem três principais métodos de criar ASP.Net Web Parts. O primeiro é criar um user control padrão. O segundo é utilizar um controle ASP.Net como uma Label e definir como sua Web Part. O terceiro é criar um controle customizado que herde da classe WebPart, este terceiro será explicado no capítulo 7 "Creating Custom Web Controls", ele é o método mais demora e mais complicado. Os outros dois métodos são mais simples.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Building Web Parts with User Controls&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para criar uma Web Part baseado em um User Control, basta adicionar o User Controle dentro de uma Web Part Zone que o Asp.Net cuida do restante. Como qualquer User Control basta declara-lo em sua página usando a diretiva @ Register, como a seguir:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;%@ Register src="VendorWebPart.ascx" tagname="VendorWebPart" tagprefix="uc1" %&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Após seu User Controle estar registrado basta adicona-lo a uma Web Part Zone, dentro da declaração ZoneTemplate. Veja abaixo:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:WebPartZone ID="WebPartZone2" runat="server" HeaderText="Fabrikam" style="width: 350px; float: left; height: auto;"&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;ZoneTemplate&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uc1:VendorWebPart ID="VendorWebPart1" runat="server" title="Fabrikam" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/ZoneTemplate&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&amp;lt;/asp:WebPartZone&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating a Web Part Control from an Existing ASP.NET Control&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Seguindo o modelo de utilizar User Controls, é possível utilizar controles padrões do Asp.Net, basta adiciona-los dentro do elemento &lt;b&gt;ZoneTemplate&lt;/b&gt; como foi feito acima. Veja o código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:WebPartZone ID="WebPartZone1" runat="server" HeaderText="Vendor Aggregate" style="width: 700px; height: auto"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;ZoneTemplate&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:Label ID="Label3" runat="server" Text="" title="Vendor Totals"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div style="margin-top: 12px; margin-bottom: 20px; line-height: 30px; font-size: 12pt"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total Active Users: &amp;lt;a href="#"&amp;gt;21&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;Total transactions today: &amp;lt;a href="#"&amp;gt;166&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;br /&amp;gt;Revenue trades to-date: &amp;lt;a href="#"&amp;gt;$34,450&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/asp:Label&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/ZoneTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:WebPartZone&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Enabling Users to Arrange and Edit Web Parts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Web Parts podem ser exibidas de diferentes formas. O modo como ela é exibida é indiferente do que o usuário esta fazendo com a Web Parts ou onde ela esta hospedada naquele momento. É possível alterar o modo de exibição das Web Parts utilizando o controle &lt;b&gt;WebPartManager&lt;/b&gt;. Basta definir a propriedade &lt;b&gt;DisplayMode&lt;/b&gt;, as opções disponíveis para esta propriedade são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;BrowseDisplayMode&lt;/b&gt;: É a forma padrão que os usuários navegam;&lt;/li&gt;&lt;li&gt;&lt;b&gt;DesignDisplayMode&lt;/b&gt;: É o modo que permite aos usuários arrastar a Web Part para diferentes locais;&lt;/li&gt;&lt;li&gt;&lt;b&gt;EditDisplayMode&lt;/b&gt;: Parecido com o DesignDisplayMode, permite aos usuários arrastar a Web Part, e além disso permite também editar os dados como título, tamanho, direção, aparência da janela e zona, utilizando os controles &lt;b&gt;AppearanceEditorPart&lt;/b&gt; e &lt;b&gt;LayoutEditorPart&lt;/b&gt;. Para utilizar este modo é necessário adicionar o controle &lt;b&gt;EditorZone&lt;/b&gt; a sua página e em seguida o controle AppearanceEditorPart e/ou LayoutEditorPart;&lt;/li&gt;&lt;li&gt;&lt;b&gt;CatalogDisplayMode&lt;/b&gt;:&amp;nbsp; Permite ao usuário adicionar Web Parts que você especificou no controle CatalogZone. Para utilizar este modo é necessário ter o controle CatalogZone em sua página;&lt;/li&gt;&lt;li&gt;&lt;b&gt;ConnectDisplayMode&lt;/b&gt;: Permite ao usuário estabelecer conexões manualmente entre os controles usando o controle ConnectionZone. Por exemplo uma Web Part pode ser ligada para mostrar informações de resumo e detalhe de um relatório. Para utilizar este modo é necessário ter o controle ConnectionZone em sua página.&lt;/li&gt;&lt;/ul&gt;O código a seguir exibe no clique de um botão como alterar o modo de exibição de uma Web Part:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected void ButtonEdit_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; string mode = (string)ViewState["mode"];&lt;br /&gt;&amp;nbsp; //switch modes&lt;br /&gt;&amp;nbsp; if (mode == "browse")&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewState["mode"] = "edit";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ButtonEdit.Text = "Done";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebPartManager1.DisplayMode = WebPartManager1.SupportedDisplayModes["Catalog"];&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewState["mode"] = "browse";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ButtonEdit.Text = "Edit";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WebPartManager1.DisplayMode = WebPartManager1.SupportedDisplayModes["Browse"];&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Repare que é usado a coleção &lt;b&gt;SupportedDisplayModes&lt;/b&gt; para definir qual modo será exibido. Neste código vale explicar que o valor da ViewState foi salvo no evento PageLoad.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Connecting Web Parts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Uma possibilidade poderosa da Web Part é a conexão entre Web Parts. Para entender o uso, imagine o cenário onde esta desenvolvendo uma aplicação para controle da folha de pagamento dos funcionários, onde você tem:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A Web Part principal onde o usuário navega entre os funcionários.&lt;/li&gt;&lt;li&gt;Uma Web Part que exibe um gráfico das horas extras pagas ao funcionário.&lt;/li&gt;&lt;li&gt;Uma Web Part que exibe um gráfico de pizza que exibe o valor da folha de pagamento, benefícios e pensões que se encaixam no perfil global do funcionário.&lt;/li&gt;&lt;li&gt;E uma Web Part que compara o salário do funcionário com outros funcionários do mesmo cargo.&lt;/li&gt;&lt;/ul&gt;Com a conexão de todas Web Parts o usuário irá selecionar o funcionário uma única vez e todas as outras Web Parts irão ter suas informações atualizadas automaticamente.&lt;br /&gt;&lt;br /&gt;Outro cenário é o desenvolvimento de um portal onde você tem várias Web Parts com informações distintas como clima, notícias locais e localização de bares. Porém todas elas necessitam do CEP para localizar essas informações, o usuário do portal irá informar o CEP uma única vez e todas as Web Parts irão se comunicar para ter acesso a este CEP.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating a Static Connection&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Conexões podem ser estáticas ou dinâmicas. Se a conexão for estática, estabelecidade pelo desenvolver no momento de desenvolvimento ela não poderá ser alterada ou excluida pelo usuário. Conexões estáticas envolvem um Provider e um ou mais WebParts consumidores. Veja os passos para se criar os controles, tanto o provider como o consumidor e estabelecer uma conexão entre eles.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Primeiro Passo:&lt;/b&gt; &lt;b&gt;Criar o WebParte provider.&lt;/b&gt;&lt;br /&gt;O WebPart provider pode derivar da classe WebPart ou ser um user control. Você deve criar no seu WebPart um método público que tenha o atributo &lt;b&gt;ConnectionProvider&lt;/b&gt;. Este método deve retornar o valor que o WebPart consumidor irá receber. Veja o código:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;public partial class Provider : System.Web.UI.UserControl&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; string _textBoxValue = "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; [ConnectionProvider("TextBox provider", "GetTextBoxValue")]&lt;br /&gt;&amp;nbsp; string GetTextBoxValue()&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _textBoxValue;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; protected void Button1_Click(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _textBoxValue = TextBoxProvider.Text;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;} &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Passo 2: Criar o WebPart consumidor.&lt;/b&gt;&lt;br /&gt;Assim como o provider pode herdar de WebPart ou ser um user control. É necessário criar um método público que possua o atributo &lt;b&gt;ConnectionConsumer&lt;/b&gt; que recebe o mesmo tipo que o método do ConnectionProvider retorna. Veja o código:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;public partial class Consumer : System.Web.UI.UserControl&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; [ConnectionConsumer("TextBox consumer", "ShowTextBoxValue")]&lt;br /&gt;&amp;nbsp; void ShowTextBoxValue(string textBoxValue)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelConsumer.Text = textBoxValue;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Passo 3:&lt;/b&gt; Crie uma WebPage e adicione o controle &lt;b&gt;WebPartManager&lt;/b&gt;, em seguida adicione o container &lt;b&gt;WebPartZone&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Passo 4:&lt;/b&gt; Adicione seus WebPart ao WebPartZone, tanto o provider como o consumidor:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:WebPartZone ID="WebPartZoneProvider" runat="server" Height="400px" Width="300px"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;ZoneTemplate&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uc1:Provider ID="Provider1" runat="server" title="Provider" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;uc2:Consumer ID="Consumer1" runat="server" title="Consumer" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/ZoneTemplate&amp;gt;&lt;br /&gt;&amp;lt;/asp:WebPartZone&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;O próximo passo é estabelecer a conexão entre os dois controles. Adicione o elemento &lt;b&gt;&amp;lt;StaticConnections&amp;gt;&lt;/b&gt; ao WebPartManager e dentro deste elemento adicione o controle &lt;b&gt;WebPartConnection&lt;/b&gt; para declarar sua conexão.&lt;br /&gt;&lt;br /&gt;O controle &lt;b&gt;WebPartConnection &lt;/b&gt;deve ter a propriedade ID, a propriedade &lt;b&gt;ProviderID&lt;/b&gt; identifica o controle provider, &lt;b&gt;ProviderConnectionPointID&lt;/b&gt; identifica o método do provider, &lt;b&gt;ConsumerID&lt;/b&gt; identifica o controle consumidor, &lt;b&gt;ConsumerConnectionPointID&lt;/b&gt; identifica o método no consumidor. Veja o código:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:WebPartManager ID="WebPartManager1" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;StaticConnections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:webPartConnection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID="conn1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProviderID="Provider1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProviderConnectionPointID="GetTextBoxValue"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConsumerID="Consumer1"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConsumerConnectionPointID="ShowTextBoxValue" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/StaticConnections&amp;gt;&lt;br /&gt;&amp;lt;/asp:WebPartManager&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Repare que você deve criar um controle &lt;b&gt;WebPartConnection&lt;/b&gt; para cada par de controle conectado.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enabling Dynamic Connections&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Conexões dinâmicas podem ser estabelecidades pelo usuário. Para permitir esta ação você precisa adicionar o controle &lt;b&gt;ConnectionsZone&lt;/b&gt; em sua página.&lt;b&gt; &lt;/b&gt;&lt;br /&gt;Para permitir que os usuários criem ou parem conexões, siga os seguintes passos:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Crie uma página com um provider e um consumidor como explicado anteriormente.&lt;/li&gt;&lt;li&gt;Opcionalmente, estabeleça uma conexão estática entre o provider e o consumidor. Esta será uma conexão padrão que estará sempre disponível para o usuário, mas ele pode modificar criar ou parar outras conexões dinâmicas.&lt;/li&gt;&lt;li&gt;Adicione o controle &lt;b&gt;ConnectionsZone&lt;/b&gt; em sua página.&lt;/li&gt;&lt;li&gt;Adiciona o controle para permitir que o usuário entre no Modo Connect como explicado anteriormente em "“Enabling Users to Arrange and Edit Web Parts".&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Establishing Dynamic Connections Among Web Parts&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quando um usuário acessar sua página ele pode alterar para o modo de conexão e utilizar o controle ConnectionsZone para editar as conexões. Veja os passsos:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Altere o modo de visualização para &lt;b&gt;connect&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;O menu do WebPart irá aparecer entre o provider e consumidor, clique em &lt;b&gt;Connect&lt;/b&gt; no menu, veja a imagem: &lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-B_dbceGcpOw/TtQKHmonHPI/AAAAAAAAAGU/k9AP14njjAk/s1600/webPart1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-B_dbceGcpOw/TtQKHmonHPI/AAAAAAAAAGU/k9AP14njjAk/s400/webPart1.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. Irá aparecer o objeto &lt;b&gt;ConnectionsZone&lt;/b&gt;:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-i5boBwjXgLo/TtQKrAeH_3I/AAAAAAAAAGc/ZNMJW4Ux2oM/s1600/webPart2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-i5boBwjXgLo/TtQKrAeH_3I/AAAAAAAAAGc/ZNMJW4Ux2oM/s400/webPart2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.Caso já exista uma conexão, clique em Disconnect para fechar esta conexão. Em seguida clique em &lt;b&gt;Create A Connection To A Consumer&lt;/b&gt;, selecione o consumidor e clique em Connect:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Hu8vV-xUMLg/TtQLYL9nbvI/AAAAAAAAAGk/hN1wddHnVo4/s1600/webPart3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/-Hu8vV-xUMLg/TtQLYL9nbvI/AAAAAAAAAGk/hN1wddHnVo4/s400/webPart3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.Quando finalizar a edição das conexões clique em &lt;b&gt;Close&lt;/b&gt;. As WebParts estarão conectadas como se fosse feito estaticamente.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Personalizing Web Parts&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;WebParts suportam personalização. A personalização permite que as alterações feitas sejam armazenadas por cada usuário, permitindo que ele visualize a página da mesma forma na próxima visita. Personalização de WebParts dependem dos cookies do navegador do usuário, através das informações dos cookies, serão buscadas as personalizaçãoes feitas no banco de dados. Armazenada essas informações por usuário, normalmente você vai querer utilizar autenticação, mas isso não é necessário.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Enabling Personalization for Custom Controls&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Para permitir esta personalização nos controles de WebPart é necessário definir no método público do controle o atributo &lt;b&gt;Personalizable&lt;/b&gt;, veja como:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;[Personalizable]&lt;br /&gt;public string PostalCode&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; get&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return _postalCode;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; set&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _postalCode = value;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Enabling Shared Personalization&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;A personalização de WebParts são habilitadas por padrão e os usuários autenticados, conseguem personalizar uma WebPart sem qualquer configuração especial. Porém essas personalizações são feitas a nível de usuário, onde cada usuário visualiza somente sua mudança.&lt;/div&gt;&lt;div style="text-align: left;"&gt;Caso queria dar permissão para algum usuário, como o webmaster do site altere a personalização de qualquer usuário, isto é possível. Basta habilitar a personalização compartilhada no web.config.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Dentro da sessão &amp;lt;system.web&amp;gt;, adicione a sessão &amp;lt;authorization&amp;gt;, então adicione o elemento &amp;lt;allow&amp;gt; para especificar qual usuário ou usuário tem acesso a personalização compartilhada.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&amp;lt;authorization&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;allow verbs="enterSharedScope" users="SomeUserAccount" roles="admin" /&amp;gt;&lt;br /&gt;&amp;lt;/authorization&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Desta forma os usuários podem alterar uma personalização e essas mudanças serão vistas por outros usuários.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Disabling Personalization for a Page&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Caso queria desabilitar a personalização em alguma página, basta definir a propriedade &lt;b&gt;WebPartManager.Personalization.Enabled&lt;/b&gt; para false. Veja como:&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&amp;lt;asp:webPartManager ID="webPartManager1" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;Personalization Enabled="False" /&amp;gt;&lt;br /&gt;&amp;lt;/asp:webPartManager&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-5076023869914236768?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/5076023869914236768/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/11/capitulo-5-input-validation-and-site_28.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/5076023869914236768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/5076023869914236768'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/11/capitulo-5-input-validation-and-site_28.html' title='Capítulo 5: Input Validation and Site Navigation Lição 3: Using Web Parts'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-5m2bnRYjU60/TrhaMTazG3I/AAAAAAAAAFw/X2KhPhih79g/s72-c/webPart1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4933749037631722567</id><published>2011-11-04T08:43:00.000-07:00</published><updated>2011-11-04T08:43:05.538-07:00</updated><title type='text'>Capítulo 5: Input Validation and Site Navigation Lição 2: Performing Site Navigation</title><content type='html'>Os sites devem prover aos usuários formas simples de navegação. Os desenvolvedores devem controlar como o usuário navega em seu site e até mesmo as execuções de PostBack em suas páginas. Esta lição mostra ferramentas que auxiliam nessas tarefas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Is Page Navigation Necessary?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Navegação entre páginas é o processo de passagem de uma página para outra. Entretanto com alguns recursos que temos atualmente como Asynchronous JavaScript e XML (AJAX), você pode executar vários processos na mesma página, sem a necessidade de ficar trocando de páginas. Você não precisa mais ficar trocando de páginas para executar algo, pode fazer isso com um PostBack para o servidor ou até mesmo do lado do cliente. Claro que existem cenários que será necessário o armazenamento em banco de dados ou coisas do tipos.&lt;br /&gt;&lt;br /&gt;Mas é importante que saiba que hoje dependendo do cenário pode fugir de metodologias antigas de navegação entre páginas para gerenciar processos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Choosing a Method to Navigate Pages&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O asp.net possui algumas maneiras de navegar entre as páginas. É bom conhecer detalhamente as diferenças entre cada maneira. Veja as opções disponíveis:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Client-side navigation&lt;/b&gt;: um código cliente permite que seja solicitado uma nova página. Este código solicita uma nova página com base no evento de um hyperlink ou a execução de um JavaScript;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Cross-page posting&lt;/b&gt;: um controle e um formulário são configurados para enviar um PostBack para uma página diferente da que faz a solicitação;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Client-side browser redirect&lt;/b&gt;: um código servidor, envia uma mensagem ao navegador solicitando uma página diferente;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Server-side transfer&lt;/b&gt;: um código servidor solicita uma transferência para uma página diferente;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Client-Side Navigation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A forma mais simples de permitir a navegação entre as páginas do seu site é utilizar um controle de Hyperlink, basta definir a propriedade NavigateUrl com o destino do link. O controle asp.net Hyperlink quando renderizado, gera o elemento html &amp;lt;a&amp;gt;, veja o exemplo:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;HyperLink Control: Source&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;lt;asp:HyperLink ID="HyperLink1"runat="server" NavigateUrl="~/NavigateTest2.aspx"&amp;gt;Goto NavigateTest2&amp;lt;/asp:HyperLink&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;HyperLink Control: Rendered HTML&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;lt;a id="HyperLink1" href="NavigateTest2.aspx"&amp;gt;Goto NavigateTest2&amp;lt;/a&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;No exemplo acima quando este link for clicado o navegador requisitará a página &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;NavigateTest2.aspx, neste caso não estamos passando nenhum informação de dados na URL, mas podemos utilizar a &lt;b&gt;querystring&lt;/b&gt;&lt;/span&gt;&lt;/span&gt; para fornecer algumas informações caso necessário.&lt;br /&gt;&lt;br /&gt;Outra forma de se fazer o mesmo processo é via javascript. O objeto &lt;b&gt;document&lt;/b&gt; representa o formulário atual no javascript. Podemos definir a propriedade &lt;b&gt;location&lt;/b&gt; para requisitar a nova página. Veja o exemplo:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;input id="Button1" type="button" value="Goto NavigateTest2" onclick="return Button1_onclick()" /&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Quando o botão for clicado ele irá acionar uma função javascript chamada &lt;b&gt;Button1_onclick()&lt;/b&gt;, esta função deve ser criada dentro da tag &amp;lt;head&amp;gt;:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp; function Button1_onclick() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; document.location="NavigateTest2.aspx";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Cross-Page Posting&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: small;"&gt;Cross-Page Posting, ou postagem entra páginas é frequentamente usado em cenários onde por exemplo existem 2 páginas, a primeira com um formulário e a segunda utilizada para exibir os dados. Na primeira basta definir a propriedade PostBackUrl de um botão com o nome da segunda página, chamada de &lt;b&gt;página de processamento&lt;/b&gt;. Esta página recebe o PostBack com os dados da primeira página para executar o processamento.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Nesta página de processamento é possível validar se ocorreu o PostBack na página anterior enviando uma coleção de dados. Através da propriedade &lt;b&gt;Page.PreviousPage&lt;/b&gt;, você valida se ocorreu ou não o PostBack, veja o exemplo a baixo:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if(Page.PreviousPage == null)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelData.Text = "No previous page in post";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelData.Text = Server.HtmlEncode(((TextBox)PreviousPage.FindControl("TextBox1")).Text);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Accessing Posted Data as Strongly Typed Data&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;É possível acessar propriedades com tipos definidos entre páginas, sem a necessidade de chamar o FindControl ou executar alguma conversão. Você pode criar uma propriedade pública na sua primeira página que terá seu valor acessado pela segunda página. Além de criar esta propriedade na primeira página, só é necessário adicionar a diretira &lt;b&gt;PreviousPageType&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;na segunda página, a página de processamento.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Imaginando o mesmo cenário do exemplo anterior, na primeira página chamada DataCollection.aspx temos um textbox e um botão onde sua propriedade PostBackUrl foi definida como "~/ProcessingPage.aspx". Crie a seguinte propriedade na primeira página:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;public string PageData&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; get { return TextBox1.Text; }&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Para ter acesso a esta propriedade na página de processamento, adicionar a diretiva &lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;PreviousPageType&lt;/b&gt;, como a seguir:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;lt;%@ PreviousPageType VirtualPath="~/ProcessingPage.aspx" %&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Na página de processamento temos uma label que irá exibir a propriedade da página anterior:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (PreviousPage == null)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelData.Text = "No previous page in post";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LabelData.Text = PreviousPage.PageData;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Acessando a propriedade &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;PreviousPage.PageData&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; conseguirá ter acesso ao valor do textbox da página anterior. Desta forma é possível declarar outras propriedade, fugindo da necessidade de conversões ou a chamada ao FindControl.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Client-Side Browser Redirect&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Este é o famoso &lt;b&gt;Response.Redirec&lt;/b&gt;t que usamos. Diversas vezes precisamos redirecionar o usuário a uma outra página com base em uma ação que ele executou no site. O objeto &lt;b&gt;Page.Response &lt;/b&gt;contém o método &lt;b&gt;Redirect &lt;/b&gt;que faz isso.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O Redirect é executado do lado do servidor, porém não é um PostBack, ele ocorre após o PostBack. Considere o exemplo que você possui uma página SubmitOrder.aspx que contém um botão que irá ocasionar um PostBack no servidor, após este PostBack você irá redirecionar o usuário a página OrderDetails.aspx&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void ButtonSubmit_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Response.Redirect("~/OrderDetails.aspx");&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O redirecionamento ocorre por que é enviado para o browser o código de resposta 302 junto com o novo endereço url. Assim a url do navegador é alterada e o usuário é redirecionado para a nova página. É necessário utilizar em momento certos, pois como é executado do lado do servidor, existe um "custo" para realizar esta operação.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A propriedade &lt;b&gt;PreviousPage&lt;/b&gt; não é alimentado neste caso, para acessar dados da página anterior é necessário utilizar outras fomas como armazenar em Cookie, variáveis de Sessão ou via QueryString.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Server-Side Transfer&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Você pode usar a Server.Transfer para forçar o Asp.Net a processar uma página diferente da informada na URL sem a necessidade de uma nova requisição no browser. Por exemplo, se você acessa uma página page1.aspx e nessa page1.aspx ela executa&lt;/span&gt; &lt;b&gt;&lt;span style="font-size: small;"&gt;Page.Server.Transfer("page2.aspx") &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt;o Asp.Net irá processar e exibir a página page2.aspx, porém para o usário isso será invisivel e na URL do navegador continuará aparecendo page1.aspx. Exemplo de código:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void Button1_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Server.Transfer("~/OrderProcessing.aspx", false);&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O método Transfer possui uma sobrecarga que possui um parâmetro boleano chamado &lt;b&gt;preserveForm&lt;/b&gt;&lt;i&gt;. &lt;/i&gt;O valor informado para este parâmetro indica se você quer manter seu formulário e os dados de query string. É possível acessar a propriedade PreviousPage durante a transferência. Se ocorrer alguma excessão na nova página que foi chamada, o processo irá retornar a página original.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Este capítulo faz questão de salientar que o uso do Server.Transfer é mais importante do que parece. Ele é útil quando você quer por exemplo navegar entre diferentes páginas no seu site, mas exibir apenas uma URL ao usuário.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O "poder" do Server.Transfer esta em você alternar suas páginas sem que o usuário veja isto.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using the Site Map Web Server Control&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Já foram explicada técnicas de como ajudar o usuário movimentado-o entre as páginas&lt;/span&gt;. Um quesito importante no seu website é uma estrutura sólida de navegação que auxilia e facilita o usuário na navegação em seu site. O Asp.Net possui uma forma de gerenciar sua estrutura e fornece-la ao usuário.&lt;br /&gt;&lt;br /&gt;Você pode gerenciar e documentar a estrutura do seu site usando um &lt;b&gt;site map&lt;/b&gt;. O &lt;b&gt;site map&lt;/b&gt; no Asp.Net é um arquivo Xml que contém a estrutura e a hierarquia do seu site, ele é utilizado para popular controles de navegação como &lt;b&gt;NavigationMenu&lt;/b&gt;, &lt;b&gt;SiteMapPath&lt;/b&gt;, e &lt;b&gt;TreeView&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Para adicionar um site map clique com o botão direito no seu projeto e selecione &lt;b&gt;Add New Item | Site Map&lt;/b&gt;. Será criado um arquivo xml com a extensão .sitemap. Você adiciona nós no site map adicionando elementos &lt;b&gt;&amp;lt;siteMapNode&amp;gt;&lt;/b&gt;. Cada elemento desse possui o atributo &lt;b&gt;title&lt;/b&gt; que será exibido ao usuário, atributo &lt;b&gt;url&lt;/b&gt; que contém a página que irá navegar e o atributo &lt;b&gt;description&lt;/b&gt; que contém uma definição da página. Exemplo de sitemap:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" &amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Default.aspx" title="Home" description=""&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Catalog.aspx" title="Our Catalog" description=""&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/ProductCategory.aspx" title="Products" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Product.aspx" title="View Product" description="" /&amp;gt;&lt;br /&gt;&amp;lt;/siteMapNode&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Cart.aspx" title="Shopping Cart" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Account.aspx" title="My Account" description=""&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/SignIn.aspx" title="Login" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/PassReset.aspx" title="Reset Password" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/AccountDetails.aspx" title="Manage Account" description=""&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Profile.aspx" title="Account Information" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/OrderHistory.aspx" title="My Orders" description=""&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/ViewOrder.aspx" title="View Order" description="" /&amp;gt;&lt;br /&gt;&amp;lt;/siteMapNode&amp;gt;&lt;br /&gt;&amp;lt;/siteMapNode&amp;gt;&lt;br /&gt;&amp;lt;/siteMapNode&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/AboutUs.aspx" title="About Us" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/Privacy.aspx" title="Privacy Policy" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/ContactUs.aspx" title="Contact Us" description="" /&amp;gt;&lt;br /&gt;&amp;lt;siteMapNode url="~/MediaKit.aspx" title="Media Relations" description="" /&amp;gt;&lt;br /&gt;&amp;lt;/siteMapNode&amp;gt;&lt;br /&gt;&amp;lt;/siteMap&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using the SiteMap Class&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A classe &lt;b&gt;SiteMap&lt;/b&gt; permite acessar em tempo de execução através do código de programação a hierarquia do seu site. Existem duas propriedades primárias &lt;b&gt;RootNode&lt;/b&gt; e &lt;b&gt;CurrentNode&lt;/b&gt; ambas retornam uma instância &lt;b&gt;SiteMapNode&lt;/b&gt;. O objeto SiteMapNode representa um nó no seu arquivo sitemap e nele você tem acesso as propriedades antes listadas: title, url e description. Para ter acesso aos nós na hierarquia você deve utilizar as propriedades &lt;b&gt;ParentNode&lt;/b&gt;, &lt;b&gt;ChildNodes&lt;/b&gt;, &lt;b&gt;NextSibling&lt;/b&gt;, e &lt;b&gt;PreviousSibling&lt;/b&gt; na instância do SiteMapNode. O código abaixo mostra quem é o nível superior da página que esta sendo acessada:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected void Button1_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Response.Redirect(SiteMap.CurrentNode.ParentNode.Url);&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Displaying Site Map Information to Users&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O sitemap é apenas um arquivo xml com informações, para exibir esses dados ao usuário são necessários controles de navegação. Esses controles de navegação podem conectar diretamente em seu arquivo site map, vou conectar no controle &lt;b&gt;SiteMapDataSource&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;O SiteMapDataSource é um controle simples designado a permitir que o programador acesse o arquivo site map. Este controle é usado como fonte de dados de controles de navegação. Para usar este controle basta arrasta-lo para sua página e ele automaticamente irá conectar no site map definido no seu site.&lt;br /&gt;&lt;br /&gt;Existem dois atributos que podem ser usados para configurar o controle SiteMapDataSource. &lt;b&gt;ShowStartingNode&lt;/b&gt; você define como false caso não queira que o usuário visualize o nós raíz do seu site. O segundo é o &lt;b&gt;StartingNodeOffset&lt;/b&gt;, é útil quando estiver usando um controle de sub-navegação e queira mostrar apenas partes da navegação. Veja como fica o código do controle:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" StartingNodeOffset="0" ShowStartingNode="False" /&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Assim como o site map o controle SiteMapDataSource não tem representação visual para o usuário, é necessário utilizar algum controle de navegação que faça isso. Existem três principais controle de navegação no asp.net: &lt;b&gt;Menu&lt;/b&gt;, &lt;b&gt;TreeView&lt;/b&gt;, e &lt;b&gt;SiteMapPath&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;O controle &lt;b&gt;Menu&lt;/b&gt; como o nome ja diz é para exibir a estrutura do seu site como um menu, o usuário conseguirá navegar desde as páginas raíz até seus últimos níveis. O Menu possui várias propriedade que envolvem principalmente layout e estilo. Mas existe dois atributos que o livro foca, é o &lt;b&gt;DataSourceId&lt;/b&gt; e &lt;b&gt;Orientation&lt;/b&gt;. No DataSourceId você irá definir o nome do controle DataSource, você pode informar o nome do &lt;b&gt;SiteMapDataSource&lt;/b&gt; que adicionou em sua página. Já &lt;b&gt;Orientation&lt;/b&gt; é para definir se irá mostrar o menu de forma veritical ou horizontal. Veja o código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1" MaximumDynamicDisplayLevels="5" Orientation="Horizontal"&amp;gt;&lt;br /&gt;&amp;lt;/asp:Menu&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Com base no site map que foi postado nesta lição, o resultado deste menu será:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-vjoBHbFC4GE/TrQGbKo2y-I/AAAAAAAAAFY/cDCuGJ-FSEA/s1600/menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-vjoBHbFC4GE/TrQGbKo2y-I/AAAAAAAAAFY/cDCuGJ-FSEA/s400/menu.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Já o controle &lt;b&gt;TreeView&lt;/b&gt; exibe a estrutura do site no formato de uma "árvore", onde o usuário poderá navegar entre os itens até chegar ao último nível e selecionar a página desejada, para utilizar o &lt;b&gt;SiteMapDataSource &lt;/b&gt;como fonte de dados, deve ser feito o mesmo processo do controle Menu. Veja como fica a &lt;b&gt;TreeView:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ibs2j9mFigg/TrQHGg417oI/AAAAAAAAAFg/p4QUQTL6vGk/s1600/TreeView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/-ibs2j9mFigg/TrQHGg417oI/AAAAAAAAAFg/p4QUQTL6vGk/s400/TreeView.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;O último controle é o &lt;b&gt;SiteMapPath&lt;/b&gt;,&lt;b&gt; &lt;/b&gt;ele permite ao usuário saber em qual página ele esta, e quais são os níveis anteriores para chegar nesta página. Este controle cria um rastro de navegação até a página que o usuário esta utilizando. Adicionando este controle a sua página ele automaticamente irá utilizar o arquivo site map, não é necessário configurar seu DataSource como nos outros controles anteriores. Veja como fica seu resultado:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-KfM9Z60IyKY/TrQH0ImBt0I/AAAAAAAAAFo/RC3_xZtk6io/s1600/SiteMapPath.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-KfM9Z60IyKY/TrQH0ImBt0I/AAAAAAAAAFo/RC3_xZtk6io/s400/SiteMapPath.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4933749037631722567?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4933749037631722567/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/11/capitulo-5-input-validation-and-site.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4933749037631722567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4933749037631722567'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/11/capitulo-5-input-validation-and-site.html' title='Capítulo 5: Input Validation and Site Navigation Lição 2: Performing Site Navigation'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-vjoBHbFC4GE/TrQGbKo2y-I/AAAAAAAAAFY/cDCuGJ-FSEA/s72-c/menu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4677358709089054377</id><published>2011-09-25T16:55:00.000-07:00</published><updated>2011-09-25T16:55:14.638-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Validation Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='validators'/><category scheme='http://www.blogger.com/atom/ns#' term='RequiredFieldValidator'/><category scheme='http://www.blogger.com/atom/ns#' term='RegularExpressionValidator'/><category scheme='http://www.blogger.com/atom/ns#' term='RangeValidator'/><category scheme='http://www.blogger.com/atom/ns#' term='CustomValidator'/><category scheme='http://www.blogger.com/atom/ns#' term='CompareValidator'/><category scheme='http://www.blogger.com/atom/ns#' term='validação'/><title type='text'>Capítulo 5: Input Validation and Site Navigation Lição 1: Performing Input Validation</title><content type='html'>Este capítulo demonstra 2 recursos do asp.net.&lt;br /&gt;&lt;br /&gt;O primeiro é a validação automática de entrada de dados em formulários web, podendo essas validações serem geradas como javascript melhorando assim o desempenho da resposta ao usuário. E também por segurança componentes que fazem validação do lado do servidor.&lt;br /&gt;&lt;br /&gt;O outro recurso deste capítulo é sobre a navegação facilitada ao usuário com o uso de Web Parts.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Lesson 1: Performing Input Validation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nesta lição serão apresentados controles que irão facilitar no momento de fazer validações de entrada de dados em formulários web.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Understanding the Validation Framework&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A validação de dados é algo comum e rotineiro para desenvolvedores. O asp.net possui ferramentas que facilitam a criação dessas valições de forma rápida e com poucos códigos.&lt;br /&gt;&lt;br /&gt;Existem 2 cenários que podem ser utilizados. Você pode utilizar a validação do lado do cliente, desta forma os controles irão gerar códigos javascripts que são rodados no browser, evitando assim que seja feita a comunicação com o servidor. Ou seja, antes mesmo do usuário clicar no botão "enviar/gravar" ele já terá uma resposta se esta preenchendo o formulário de maneira correta. Porém este é um cenário que não é totalmente seguro, usuário maliciosos podem facilmente "boicotar" essa validações que rodam do lado do cliente.&lt;br /&gt;&lt;br /&gt;Porém o asp.net fornece ferramentas que fazem as mesmas validações do lado do servidor, garantindo assim maior segurança dos dados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Adding Validation Controls to Your Page&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Você pode localizar os controles de validação na ToolBox do Visual Studio, você irá proceder da mesma forma com que faz com outros controles. Siga os seguintes passos para adicionar uma validação a sua página:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Abra a página no Design view e abra a ToolBox. Adicione um controle de entrada de dados que será validado, como um TextBox ou RadioButtonList.&lt;/li&gt;&lt;li&gt;Vá até a aba &lt;b&gt;Validation&lt;/b&gt; da Toolbox. Arraste um &lt;b&gt;RequiredFieldValidator&lt;/b&gt; para próximo do TextBox que será validado como campo obrigatório.&lt;/li&gt;&lt;li&gt;Defina a propriedade ID do &lt;b&gt;RequiredFieldValidator&lt;/b&gt; com um nome semelhante do ID definido ao TextBox, desta forma seu código ficará mais facil de ser entendido. Por exemplo, caso seu TextBox tenha a propriedade ID dfinida como &lt;b&gt;NomeTextBox&lt;/b&gt;, defina o ID do RequiredFieldValidator como &lt;b&gt;NomeTextBoxValidator&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Defina a propriedade &lt;b&gt;ControlToValidate&lt;/b&gt; do seu RequiredFieldValidator com o ID do seu TextBox, neste caso, &lt;b&gt;NomeTextBox.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Defina a propriedade &lt;b&gt;ErrorMessage&lt;/b&gt;, esta será a mensagem exibida ao usuário, utilize algo que facilite o entendimento do usuário. É comum exibir essas mensagens todas em um único controle chamado &lt;b&gt;ValidationSummary&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Defina a propriedade &lt;b&gt;Text&lt;/b&gt; do TextBox para algo que "avise" o usuário que a validação falhou. Caso você utilize um ValidationSummary, pode definir a propriedade Text com um asterisco (*).&lt;/li&gt;&lt;li&gt;Caso não queria exibir nada na propriedade Text é recomendado utilize a propriedade &lt;b&gt;tooltip&lt;/b&gt; com uma mensagem curta e similar a mensagem de erro que é exibida no ValidationSummary, desta forma quando o usuário levar o cursor ao TextBox irá ver que a validação falhou.&lt;/li&gt;&lt;li&gt;Caso não queira que seja exibida mensagem ao usuário se a validação falhe, defina a propriedade &lt;b&gt;Display&lt;/b&gt; para &lt;b&gt;None&lt;/b&gt;. Se deseja exibir a mensagem pro usuário, defina a propriedade como &lt;b&gt;Static&lt;/b&gt;, porém como é uma mensagem estatica, defina uma mensagem em branco que irá aparecer antes de ocorrer a validação. Caso contrário deixe a propriedade como &lt;b&gt;Dynamic&lt;/b&gt; para que o asp.net formate a saída do texto caso ocorra uma falha de validação;&lt;/li&gt;&lt;li&gt;Opcionalmente utilize o controle &lt;b&gt;ValidationSummary&lt;/b&gt; para exibir várias mensagem de erros de validação. É muito útli quando possui vários controles que são validados e dificulta posicionar todas as mensagens de forma separada em sua página. É interessante que este controle seja posicionado próximo ao botão de submit ou no topo do formulário. Você pode definir a propriedade &lt;b&gt;ShowMessageBox&lt;/b&gt; para &lt;b&gt;true&lt;/b&gt;, onde este controle irá exibir um PopUp com as mensagens de erros de validação.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Server-Side Validation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Os controles de validação trabalham em conjunto com o objeto Pag, para garantir que os dados do clientes sejam válidos quando chegar ao servidor. A classe Page possui a propriedade &lt;b&gt;Validators &lt;/b&gt;que contém que é uma coleção de todos os validadores da página. A classe possui também um método chamado &lt;b&gt;Validate&lt;/b&gt; que pode ser executado para verificar cada controle de validação.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O Asp.net chama o método Validate automaticamente após o Load da página. Portando você pode descobrir se a página é válida através da propriedade &lt;b&gt;Page.IsValid&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Client-Side Validation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O Asp.net escreve os códigos de validação do lado do cliente quando você utiliza um controle de validação. O Asp.net escreve os códigos javascript que são executados quando o usuário sai de um campo que possui algum tipo de validação.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Toda vez que um controle que possui uma validação perder o foco será disparado a validação javascript podendo assim exibir uma mensagem de aviso ao usuário. Você pode usar a propriedade &lt;b&gt;SetFocusOnError&lt;/b&gt; para definir um foco ao controle quando sua validação falhar, desta forma o usuário so conseguirá sair deste campo quando entrar com dados válidos.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Determining When to Cause Validation&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Utilizar a validação do lado do cliente é útil pois evita o envio da página para o servidor caso a página não seja válida. Porém isto pode ocasionar problemas em algumas situações. Por exemplo, caso você tenha um botão de Ajuda ou de Cancelar, estes botões não conseguiram disparar seus eventos para o servidor enquanto a página não estiver totalmente válida.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Para estes casos, existe a propriedade &lt;b&gt;CausesValidation&lt;/b&gt;. Esta propriedade pode ser definida como false quando deseja que algum botão seja executado sem passar pela validação, pode ser usados em botão de Limpar, Voltar, etc...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using Validation Groups&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Existem cenários onde é necessário validar somente parte dos controles da sua página. Você pode agrupar seus controles de uma forma que serão válidados por grupos. Os controles de validação possuem a propriedade &lt;b&gt;ValidationGroup&lt;/b&gt; que recebe uma string, esta string deve ser comum aos controles que deseja validar ao mesmo tempo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Isso é possível por que o método &lt;b&gt;Validate&lt;/b&gt; da página possue uma sobrecarga que recebe uma string como parâmetro, que é o &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;ValidationGroup. &lt;/b&gt;Esta sobrecarga é executada quando ocorre um postback na página causando a validação dos controles.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O objeto Page possue também o método &lt;b&gt;GetValidators&lt;/b&gt; que recebe uma string como parâmetro, neste caso devemos informar o ValidationGroup, e este método retornará todos os controles que são validados neste &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ValidationGroup.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Understanding the RequiredFieldValidator Control&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle &lt;b&gt;RequiredFieldValidator&lt;/b&gt; é utilizado para forçar que o usuário informe ou altere a informação de algum controle. O &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;RequiredFieldValidator&lt;/b&gt; não valida informações como data, números inteiros e outros. Ele é utilizado para forçar o usuário a preencher os dados.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Além de obrigar o usuário a preencher o text de um textbox por exemplo, você definir um valor padrão para a propriedade text do seu controle, obrigando o usuário a alterar este valor. O &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;RequiredFieldValidator possue a propriedade &lt;b&gt;InitialValue&lt;/b&gt;, o valor informado para esta propriedade será considerado inválido caso o usuário não altere.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Exemplo: Você possui um dropdownlist de Estado, onde o primeiro valor do seu dropdownlist é "Selecione um estado...", você pode informar este valor para o &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;InitialValue&lt;/b&gt; do seu &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;RequiredFieldValidator forçando o usuário a escolher outra opção.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using the CompareValidator Control&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle &lt;b&gt;CompareValidator&lt;/b&gt; permite validação de comparações, usando operadores como maior ou menor para comparar entrada de dados do usuário em um ou diferentes controles.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O CompareValidator pode ser usado para validar se o tipo de dados esta correto em um controle, como por exemplo se é uma data ou um número. Para este propósito você deve definir a propriedade &lt;b&gt;Type&lt;/b&gt; para um tipo válido que será verificado. Se o objetivo for somente verificação de dados, pode ser definida a propriedade &lt;b&gt;Operator&lt;/b&gt; para &lt;b&gt;DataTypeCheck&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A imagem abaixo mostra a janela de propriedade do controle &lt;b&gt;CompareValidator&lt;/b&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-muaqP08oX78/TngMd-4RQeI/AAAAAAAAAEE/-GgYvrBMqXM/s1600/CompareValidator.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="532" src="http://2.bp.blogspot.com/-muaqP08oX78/TngMd-4RQeI/AAAAAAAAAEE/-GgYvrBMqXM/s640/CompareValidator.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O &lt;b&gt;CompareValidator&lt;/b&gt; utiliza a propriedade &lt;b&gt;ValueToCompare &lt;/b&gt;para definir uma constante que será usada para fazer a comparação. Como exemplo, se você deseja que o usuário informe uma data superior a 1900, você deve definir a propriedade ValueToCompare para &lt;b&gt;1/1/1900 &lt;/b&gt;e definir a propriedade &lt;b&gt;Operator, &lt;/b&gt;onde terá as seguintes opções: &lt;b&gt;Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, ou DataTypeCheck. &lt;/b&gt;Neste caso deve definir &lt;b&gt;GreaterThanEqual&lt;/b&gt; (maior ou igual que).&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Também é possível utilizar este controle para validar duas datas, se uma é maior que a outra, ou validar se dois controles tem o mesmo valor, existe uma série de validações que podem ser criadas com o &lt;b&gt;CompareValidator&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using the RangeValidator Control&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Muitas vezes temos a necessidade de validar um valor dentro de uma variação. Por exemplo, podemos querer que um campo de data seja informado com o Ano que seja o mesmo que o Ano corrente. Para este tipo de validação usamos o &lt;b&gt;RangeValidator&lt;/b&gt;, ele possui duas propriedade principais, &lt;b&gt;MinimumValue&lt;/b&gt; e &lt;b&gt;MaximumValue&lt;/b&gt;, o nome delas já são bem intuitivos, outro propriedade é a &lt;b&gt;Type&lt;/b&gt; que define qual o tipo de dados irá validar.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;No exemplo a baixo o controle recebe o valor do ano corrente como valor máximo e 1900 como valor minimo para não permitir que o usuario informe uma data fora deste intervalo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (!IsPostBack)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RangeValidatorSalesDate.MinimumValue = "1990";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RangeValidatorSalesDate.MaximumValue = DateTime.Now.Year.ToString();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Using the RegularExpressionValidator Control&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Este control&lt;/span&gt;&lt;/span&gt;e efetua suas validações através de &lt;b&gt;expressões regulares&lt;/b&gt;. Uma expressão regular é uma série de combinações de caracteres que são usadas para identificar sequências de caracteres simples ou complexas. O controle possui a propriedade &lt;b&gt;ValidationExpression&lt;/b&gt; onde você deve informar sua expressão regular.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Expressões regulares são complexas, porém não são exigidas nesta certificação, por isso o assunto não é muito discutido. Mas em todo o caso, o visual studio possui algumas expressões regulares pré-definidas neste controle, como por exemplo, validação de endereço de e-mail ou uma url válida. Veja na imagem a baixo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hpAAArTs5vc/TngT0NEEqWI/AAAAAAAAAEI/5HqGzH0m6XA/s1600/expressaoRegular.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://3.bp.blogspot.com/-hpAAArTs5vc/TngT0NEEqWI/AAAAAAAAAEI/5HqGzH0m6XA/s400/expressaoRegular.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The CustomValidator Control&lt;/b&gt;&lt;/span&gt; &lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Apesar dos diversos controles de validação que o asp.net fornece, pode acontecer de você precisar de algum outro tipo de validação. Para estes casos, você deve utilizar o controle &lt;b&gt;CustomValidator&lt;/b&gt;. A validação deste controle é baseada no código em que o desenvolvedor cria. Você tem a opção de utilizar a validação com javascript para rodar do lado do cliente, ou fazer via c# para rodar do lado do servidor.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Custom Client-Side Validation&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Como ja falado diversas vezes, a validação do lado do cliente acontecerá bem mais rápido para quem estiver utilizando sua página.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O primeiro passo é escrever sua validação do lado cliente, você deve possui um método com a seguinte assinatura:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;function ClientFunctionName(source, arguments)&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Você pode renomear o método conforme sua necessidade, porém os parâmetros de entrada não podem ser modificados. Após este método ser referenciado em seu controle, o framework de valiação irá executar seu método automaticamente. Quando a função de validação for executada, o parâmetro chamado &lt;b&gt;source &lt;/b&gt;irá conter uma referência ao controle de validação que este sendo executado. Já o parâmetro &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;arguments &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;tem a propriedade chamada &lt;b&gt;Value&lt;/b&gt; que possue os dados a serem validados.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Em seguida deve escrever seu código de validação, e definir a propriedade &lt;b&gt;arguments.IsValid&lt;/b&gt; para true ou false. E para finalizar basta definir a propriedade &lt;b&gt;ClientFunctionName&lt;/b&gt; de seu controle, com o nome de sua função.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;No exemplo a seguir, existe o seguinte cenário: você possui em sua página um controle &lt;b&gt;TextBox&lt;/b&gt;, um &lt;b&gt;botão &lt;/b&gt;para confirmar os dados, um &lt;b&gt;ValidationSummary &lt;/b&gt;para exibir as mensagens de erro, e um &lt;b&gt;RequiredFieldValidator &lt;/b&gt;para obrigar o usuário a informar uma nova senha no TextBox. Além disso tem o &lt;b&gt;CustomValidator &lt;/b&gt;que irá fazer a seguinte validação nos dados do textbox, é um campo de senha que deve ter entre 6 e 14 caracteres, deve conter pelo menos 1 letra maiscula, uma minuscula, e pelo menos 1 número. Veja como fica o código:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;lt;%@ Page Language="VB" AutoEventWireup="false" CodeFile="NewPassword.aspx.vb" Inherits="NewPassword" %&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/ xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head id="Head2" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Change Password&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body style="font-family: Arial"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form id="form1" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;table width="400"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&amp;lt;td colspan="2" style="font-size: x-large"&amp;gt;Change Password&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td colspan="2"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ValidationSummary ID="ValidationSummary1" runat="server" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td width="190" align="right" valign="middle"&amp;gt;New password:&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td width="210" valign="middle"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:TextBox ID="NewPasswordTextBox" runat="server" TextMode="Password"&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:RequiredFieldValidator ID="RequiredFieldValidatorPassword" runat="server" ErrorMessage="Please enter a valid password" text="*" ToolTip="Please enter a valid password" ControlToValidate="NewPasswordTextBox"&amp;gt;&amp;lt;/asp:RequiredFieldValidator&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:CustomValidator ID="NewPasswordCustomValidator" runat="server" Text="*" ToolTip="Password must be between 6-14 characters and include 1 capital letter, 1 lowercase letter, and 1 number" ErrorMessage="Password must be between 6-14 characters and include 1 capital letter, 1 lowercase letter, and 1 number" ControlToValidate="NewPasswordTextBox" ClientValidationFunction="ValidatePassword"&amp;gt;&amp;lt;/asp:CustomValidator&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;asp:Button ID="ButtonSubmit" runat="server" Text="Submit" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O próximo passo é adicionar o código javascript com a função de validação. A função chama &lt;b&gt;ValidatePassword&lt;/b&gt;. Observe que a assinatura do método segue o padrão mostrado anteriormente, e que como é definida o &lt;b&gt;arguments.IsValid.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; function ValidatePassword(source, arguments) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;var data = arguments.Value.split('');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;//start by setting false&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;arguments.IsValid = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;//check length&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if(data.length &amp;lt; 6 || data.length &amp;gt; 14) return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;//check for uppercase, lowercase, and number&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;var uc = false; var lc = false; var num = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;for (var c in data) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (data[c] &amp;gt;= 'A' &amp;amp;&amp;amp; data[c] &amp;lt;= 'Z') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;uc = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else if (data[c] &amp;gt;= 'a' &amp;amp;&amp;amp; data[c] &amp;lt;= 'z') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;lc = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else if (data[c] &amp;gt;= '0' &amp;amp;&amp;amp; data[c] &amp;lt;= '9') {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;num = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (uc &amp;amp;&amp;amp; lc &amp;amp;&amp;amp; num) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;arguments.IsValid = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Como último passo basta definir a propriedade ClientValidationFunction com o nome da função javascript, no momento do teste, assim que o foco sair do TextBox, a validação será executada.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hEB2W_Vuj_g/Tn-7mvn-NCI/AAAAAAAAAEk/mcj4i0WCDfU/s1600/customValidator.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-hEB2W_Vuj_g/Tn-7mvn-NCI/AAAAAAAAAEk/mcj4i0WCDfU/s400/customValidator.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Custom Server-Side Validation&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O CustomValidador pode ser usado para validar os dados do lado do cliente, do servidor ou ambos. Para utilizar do lado do servidor, você deve utilizar o evento &lt;b&gt;ServerValidate&lt;/b&gt;. Você associa este evento ao controle da mesma forma com que faz outros eventos de outros controles. Os parâmetros de entrada da assinatura do evento é a mesma utilizada com a validação do lado do cliente. Os parâmetros &lt;b&gt;source&lt;/b&gt; e &lt;b&gt;args&lt;/b&gt;. Utilizando as mesmas propriedade para definir se a valiação foi válida ou não. O código a seguir, demonstra o mesmo exemplo utilizado anteriormente.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void NewPasswordCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string data = args.Value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Start by setting false&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; args.IsValid = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check length&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (data.Length &amp;lt; 6 || data.Length &amp;gt; 14) return;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Check for uppercase, lowercase, and numeric&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool uc = false; bool lc = false; bool num = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (char c in data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (char.IsUpper(c))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; uc = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else if (char.IsLower(c))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; lc = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else if (char.IsNumber(c))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (uc &amp;amp;&amp;amp; lc &amp;amp;&amp;amp; num)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //must be valid&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; args.IsValid = true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Assim encerra esta primeira lição!!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4677358709089054377?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4677358709089054377/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/09/capitulo-5-input-validation-and-site.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4677358709089054377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4677358709089054377'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/09/capitulo-5-input-validation-and-site.html' title='Capítulo 5: Input Validation and Site Navigation Lição 1: Performing Input Validation'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-muaqP08oX78/TngMd-4RQeI/AAAAAAAAAEE/-GgYvrBMqXM/s72-c/CompareValidator.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-8572792652574358388</id><published>2011-08-15T17:10:00.000-07:00</published><updated>2011-08-15T17:22:47.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='controles'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='MultiView'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='Button'/><category scheme='http://www.blogger.com/atom/ns#' term='ImageMap'/><category scheme='http://www.blogger.com/atom/ns#' term='FileUpload'/><category scheme='http://www.blogger.com/atom/ns#' term='ImageButton'/><category scheme='http://www.blogger.com/atom/ns#' term='Xml'/><category scheme='http://www.blogger.com/atom/ns#' term='Table'/><category scheme='http://www.blogger.com/atom/ns#' term='Wizard'/><category scheme='http://www.blogger.com/atom/ns#' term='Image'/><category scheme='http://www.blogger.com/atom/ns#' term='controls'/><category scheme='http://www.blogger.com/atom/ns#' term='Panel'/><title type='text'>Capítulo 4: Using Server Controls Lição 2: Exploring Specialized Server Controls</title><content type='html'>Se olharmos a alguns anos atras, criar um simples calendário em uma página web era uma tarefa no minimo chata, era necessário criar tabelas, linhas e colunas, e adicinoar hyperlink nas datas, o javascript até poderia ajudar neste trabalho, mas ainda assim era uma tarefa chata.&lt;br /&gt;&lt;br /&gt;O asp.net possui diversos controles onde o objetivo é justamente este facilitar no desenvolvimento de páginas que necessitam desses recursos. Esta lição irá falar sobre os seguinte controles que facilitam a nossa vida:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Table&lt;/li&gt;&lt;li&gt;Image&lt;/li&gt;&lt;li&gt;ImageButton&lt;/li&gt;&lt;li&gt;ImageMap&lt;/li&gt;&lt;li&gt;Calendar&lt;/li&gt;&lt;li&gt;FileUpload&lt;/li&gt;&lt;li&gt;Panel&lt;/li&gt;&lt;li&gt;MultiView&lt;/li&gt;&lt;li&gt;Wizard&lt;/li&gt;&lt;li&gt;Xml&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Table, TableRow, and TableCell Controls&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Antigamente, e alguns desenvolvedores até hoje utilizam tables, tr e td html. Mas sabemos que devemos evitar o uso dessas tags html e usar divs, span e etc... Porém fica dificil fazer tudo com divs, quando se tem a necessidade de exibir dados tabulados.&lt;br /&gt;&lt;br /&gt;Estes controles do asp.net tem o mesmo objetivo da table, tr e td do html, a grande diferença é que são Server Controls e por isso podem ser criados e manipulados em tempo execução.&lt;br /&gt;&lt;br /&gt;O controle table possui uma propriedade que é uma coleção do controle TableRow, e por sua vez o TableRow possui uma propriedade que é uma coleção dos controles TableCell. Todos eles herdam a classe WebControl, por isso possuem as propriedades comuns como Font, BackColor e ForeColor.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Adding Rows and Cells Dynamically to a Table Control&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O Visual Studio permite que você crie seu controle Table pelo designer dele, simplesmente arrastando o controle para sua página e editando suas propriedades, onde terá a opção de adicionar linhas e em seguida células. Porém se irá criar tabelas estáticas que não serão manipuladas em tempo de execução é recomendado que utilize as tabelas do html, pois terão melhor performance que os Controls Server do asp.net.&lt;br /&gt;&lt;br /&gt;O único motivo para utilizar este controle é a necessidade de manipular em tempo de execução, a baixo código explicando:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Na ToolBox arraste o Controle Table para sua página.&lt;/li&gt;&lt;li&gt;Vá ao arquivo de code-behind e crie o evento PreInit do seu formulário.&lt;/li&gt;&lt;li&gt;Dentro deste evento escreva um loop para criar 5 linhas em seu controle.&lt;/li&gt;&lt;li&gt;Dentro deste loop, adicione outro loop para criar 3 célular dentro de cada linha.&lt;/li&gt;&lt;li&gt;Dentro do último loop modifique a propriedade TableCell.Tex para identificar a linha e a coluna.&lt;/li&gt;&lt;/ol&gt;&lt;i&gt;protected void Page_PreInit(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Table1.BorderWidth = 1;&lt;br /&gt;&amp;nbsp; for (int row = 0; row &amp;lt; 5; row++)&lt;/i&gt;&lt;i&gt;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TableRow tr = new TableRow();&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;for (int column = 0; column &amp;lt; 3; column++)&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;{&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;TableCell tc = new TableCell();&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;tc.Text = string.Format("Row:{0} Cell:{1}", row, column);&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;tc.BorderWidth = 1;&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;tr.Cells.Add(tc);&lt;/i&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;i&gt;}&lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; Table1.Rows.Add(tr);&lt;/i&gt;&lt;i&gt;&amp;nbsp; &lt;/i&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; &lt;/i&gt;&lt;i&gt;}&lt;br /&gt;} &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Neste código repare que foi modificado a propriedade Table1.BorderWidth e BorderWidth de cada célula também, o resultado será:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-FELxara-zq4/Th3KNPDKJAI/AAAAAAAAAC8/nXdlXLMiXrU/s1600/table.png" /&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Image Control&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle de image como o nome ja sugere, renderiza uma imagem no browser, mais uma vez vale lembrar que só é válido usar este controle caso queira manipular em tempo de execução, caso contrário utilize a tag &amp;lt;img&amp;gt; do html. Aliás, o controle Image do asp.net irá renderizar uma &amp;lt;img&amp;gt; quando for processado.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle Image herda da classe WebControl e os controles &lt;/span&gt;&lt;span style="font-size: small;"&gt;ImageMap e ImageButton herdam diretamente de Image.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: inherit; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A propriedade primária do Image é &lt;b&gt;ImageUrl &lt;/b&gt;que contém o caminho da imagem que será exibida no browser, mas existem mais algumas propriedades:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: inherit;"&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;AlternateText: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-size: small;"&gt;Esta propriedade tem diversas funções. Quando por algum motivo a imagem não for carregada no browser, o texto que irá aparecer no lugar dela é o que for definido nesta propriedade. A maioria dos navegadores exibe o texto desta propriedade quando passa o cursor do mouse por cima da imagem, como um Tooltip. E a função que considero mais importante é que ajuda usuário com necessidade especiais de acessibilidade para navegar em sua página. Caso sua imagem tenha um link utilize esta propriedade para descrever seu link, caso seja uma imagem de conteúdo descreva a imagem com palavras chaves para facilitar motores de busca a indexar sua imagem corretamente.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;ImageAlign&lt;/b&gt;: Esta propriedade especifica a posição da imagem em relação a outros objetos em sua página. Existem as seguintes opções: NotSet, Left, Right, Baseline, Top, Middle, Bottom, AbsBottom, AbsMiddle, ou TextTop.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;DescriptionUrl: &lt;/b&gt;Esta propriedade é outro recurso de acessibilidade, quando for usados leitores não visuais para acessar sua página, ele irá encontrar nesta propriedade um link, tem que ser uma url, que irá direcionar para uma página com texto explicativo ou audio, explicando melhor o que é aquela imagem.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;GenerateEmptyAlternateText&lt;/b&gt;: Definindo esta propriedade para &lt;b&gt;true&lt;/b&gt;, quando a página for carregada e por algum motivo a imagem não seja carregada a propriedade &lt;b&gt;alt&lt;/b&gt; do objeto &lt;b&gt;&amp;lt;img&amp;gt;&lt;/b&gt; ficará: alt="". Desta forma quando for usado um leitor não visual o software irá ignorar esta imagem, entendo que ela não tem significado para a página.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A baixo um exemplo de código de como criar um controle Image em tempo de execução:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Image1.ImageUrl = "~/images/whale.jpg";&lt;br /&gt;&amp;nbsp; Image1.DescriptionUrl = "~/WhaleImageDescription.htm";&lt;br /&gt;&amp;nbsp; Image1.AlternateText = "This is a picture of a whale";&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The ImageButton Control&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle de Image não possui o evento click, se você necessitar deste evento, é necessário utilizar o controle ImageButton ou ImageMap, estes controles são renderizados como o controle Image com a diferença de funcionar como um botão, com estes controles é possível também localizar as coordenadas x e y de onde o usuário clicou, caso queira tomar alguma decisão em relação a este aspecto.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle ImageButton é renderizado no html como: &amp;lt;input type="image"&amp;gt;, por ter eventos associados a ele, é possível executar um PostBack em seu formulário através do controle. Por herdar diretamente do controle Image o ImageButton possui as mesmas propriedades como AlternateText, DescriptionUrl, ImageAlign, e GenerateEmptyAlternateText&lt;i&gt;.&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O ImageButton assim como o Button possui dois eventos o &lt;b&gt;click&lt;/b&gt; e o &lt;b&gt;command&lt;/b&gt;, a diferença entre eles já explique em lições anteriores. O segundo parâmetro de ambos os eventos é do tipo &lt;b&gt;ImageClickEventArgs&lt;/b&gt;, que é o parâmetro que possui as coordenadas do clique.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O código a seguir demonstra o clique em um ImageButton:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;public partial class ImageButton_Control : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageButton1.ImageUrl = "~/images/redblue.jpg";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageButton1.AlternateText =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "This is a button. The left side is red. The right is blue.";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; protected void ImageButton1_Click(object sender, ImageClickEventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageButton1.AlternateText =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string.Format("Button Clicked at {0},{1}", e.X, e.Y);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Repare que no evento Click do botão, é definida a propriedade AlternateText com os valores das coordenadas de onde o usuário clicou.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The ImageMap Control&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O ImageMap é similar ao ImageButton, a grande diferença é que em qualquer lugar que clicar do ImageButton irá ocasionar o PostBack, já com o ImageMap é possível definir regiões "hot spots" que irão ocasionar o PostBack.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O ImageMap quando renderizado gera o elemento html: &amp;lt;img usemap="#myMap"&amp;gt;. Assim como o ImageButton o ImageMap herda diretamente da classe Image, por isso possui as mesmas propriedades.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;No asp.net o ImageMap é representado pelo elemento: &amp;lt;asp:ImageMap&amp;gt; e seus elementos são: CircleHotSpot, RectangleHotSpot, e PolygonHotSpot.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Working with HotSpot Classes&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O HotSpot é uma área pré-definida da imagem que quando clicada irá executar uma ação. É possível criar várias áreas dentro da mesma imagem. As classes que herdam da classe HotSpot são CircleHotSpot, RectangleHotSpot, e PolygonHotSpot. Propriedades:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;AccessKey&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;já explicado anteriormente em outros controles;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;AlternateText&lt;/b&gt;: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;já explicado anteriormente em outros controles;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;HotSpotMode&lt;/b&gt;:&lt;/span&gt; &lt;span style="font-size: small;"&gt;Comportamento quando clicar na área (HotSpot) criada. Pode ser definido como: NotSet, Inactive, Navigate, ou PostBack&lt;span style="font-size: small;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;NavigateUrl&lt;/b&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="font-size: small;"&gt;Url que irá navegar quando a área for clicada;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;PostBackValue&lt;/b&gt;: Uma string que será passada para o lado do servidor quando a área for clicada;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;TabIndex&lt;/b&gt;: Número indice do HotSpot;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Target&lt;/b&gt;: A janela ou frame que será exibido o resultado do clique da área.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Understanding the HotSpotMode Property&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A propriedade HotSpotMode é usada para definir o comportamento do HotSpot quando ele for clicado. Esta propriedade pode ser definida tanto em um HotSpot como no controle ImageMap. Se você definir o valor desta propriedade para ambos, prevalecerá o valor que estiver no HotSpot e ignorará o valor atribuido ao ImageMap. Vamos aos valores permitidos desta propriedade:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;NoSet: É usado quando você quer herdar o comportamento padrão definido no controle ImageMap, você define a propriedade no ImageMap e no HotSpot deixe como NotSet;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Navigate: Simples, especifique uma url que será aberta quando clicar em seu HotSpot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;PostBack: Quando o HotSpot for clicado ele irá executar um PostBack em seu formulário enviando os dados para o servidor. Basta criar o evento e informar o valor da propriedade &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;PostBackValue&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; que será passada no parâmetro &lt;b&gt;ImageMapEventArgs&lt;/b&gt; do seu evento.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Inactive: Como o nome já diz não será feito nada. Por que usar? Você pode criar HotSpot de zonas complexas, onde você define uma área inativa dentro de outro HotSpot ativo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O código abaixo demonstra como usar, teremos uma imagem que contém 3 cores e é possível definir a região de cada cor:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;public partial class HotSpotControl : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageMapStopLight.ImageUrl = "~/images/stoplight.jpg";&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ImageMapStopLight.AlternateText = "Stoplight picture";&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ImageMapStopLight.HotSpotMode = HotSpotMode.PostBack;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;RectangleHotSpot redHotSpot = new RectangleHotSpot();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;redHotSpot.Top = 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;redHotSpot.Bottom = 40;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;redHotSpot.Left = 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;redHotSpot.Right = 40;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;redHotSpot.PostBackValue = "RED";&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ImageMapStopLight.HotSpots.Add(redHotSpot);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;RectangleHotSpot yellowHotSpot = new RectangleHotSpot();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;yellowHotSpot.Top = 41;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;yellowHotSpot.Bottom = 80;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;yellowHotSpot.Left = 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;yellowHotSpot.Right = 40;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;yellowHotSpot.PostBackValue = "YELLOW";&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ImageMapStopLight.HotSpots.Add(yellowHotSpot);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;RectangleHotSpot greenHotSpot = new RectangleHotSpot();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;greenHotSpot.Top = 81;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;greenHotSpot.Bottom = 120;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;greenHotSpot.Left = 0;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;greenHotSpot.Right = 40;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;greenHotSpot.PostBackValue = "GREEN";&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;ImageMapStopLight.HotSpots.Add(greenHotSpot);&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;}&lt;br /&gt;&amp;nbsp; protected void ImageMapStopLight_Click(object sender, ImageMapEventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;Label1.Text = string.Format("You clicked the {0} rectangle.", e.PostBackValue);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Resultado quando se clica no retângula verde:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-5jawGB-Zizg/TiRhz9zpFgI/AAAAAAAAADA/xbB65pzhurw/s1600/imageMap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://2.bp.blogspot.com/-5jawGB-Zizg/TiRhz9zpFgI/AAAAAAAAADA/xbB65pzhurw/s320/imageMap.png" width="320" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Calendar Control&lt;/b&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle Calendar irá exibir um calendário em sua página. Ele é usado para seleção de datas, seja um única data ou um conjunto de datas. No asp.net o elemento dele é o &amp;lt;asp:Calendar&amp;gt;, quando renderizado em sua página ele irá gerar uma &amp;lt;table&amp;gt; html associada com javascripts que o próprio asp.net irá criar.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Como eu disse o Calendar tem a opção de selecionar nenhum ou várias datas, isto é contralado pela propriedade &lt;b&gt;SelectionMode&lt;/b&gt;, e as opções disponíveis são:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Day: permite selecionar uma data simples;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Week: permite selecionar uma data simples ou uma semana completa;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;WeekMonth: permite selecionar uma data simples, uma semana completa ou todo o mês;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;one: não permite que você selecionar qualquer data.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O Calendar tem uma série de propriedades que permite você ajustar seu formato:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Caption: texto renderizado no calendário;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;CaptionAlign: alinhamento do texto: Top, Bottom, Left, Right, ou NotSet;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;CellPadding: espaço da célula para a borda da célula;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;CellSpacing: espaço entra cada célula;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;DayHeaderStyle: o estilo que será aplicado aos dias da semana;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;DayNameFormat: o formato dos nomes dos dias das semanas: FirstLetter,&lt;br /&gt;FirstTwoLetters, Full, Short, Shortest;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;DayStyle: estilo padrão para os dias do calendário;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;FirstDayOfWeek: o dia da semana que será exibido na primeira coluna do calendário;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;NextMonthText: texto que será exibido no controle de navegação para ir para o próximo mês, por padrão o usado é &lt;b&gt;&amp;gt;&lt;/b&gt;. Este controle de navegação só é habilitado quando a propriedade ShowNextPrevMonth for true;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;NextPrevFormat: define o formato dos controles de navegação próximo e anterior. Pode ser definido como CustomText (padrão), FullMonth(exemplo Janeiro) ou ShortMonth (exemplo Jan);&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;NextPrevStyle: estilo que será aplicado aos controles de navegação;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;OtherMonthDayStyle: estilo dos dias do calendário e não são do mês selecionado;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;PrevMonthText: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;texto que será exibido no controle de navegação para ir para o mês anterior, por padrão o usado é &lt;b&gt;&amp;lt;&lt;/b&gt;. Este controle de navegação só é habilitado quando a propriedade ShowNextPrevMonth for true;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectedDate: data selecionada pelo usuário;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectedDates: coleção de datas selecionada pelo usuário, quando assim for permitido;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectedDayStyle: estilo da data selecionada;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectionMode: valor que indica como as datas podem ser selecionadas, como ja expliquei a cima;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectMonthText: texto exibido para a seleção do mês, por padrão é &amp;gt;&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectorStyle: estilo para os seletores de semana e mês;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;SelectWeekText: texto de seleção da semana no seletor;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ShowDayHeader: indica se o header do dia deve ser exibido;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ShowGridLines: indica se deve exibir gridLines;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ShowNextPrevMonth: indica se os controles de navegação entre meses deve ser exibido;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;ShowTitle: indica se o titulo deve ser exibido;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;TitleFormat: indica como deve ser o formato do título, exibindo o mês ou mês e ano;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;TitleStyle: estilo do título;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;TodayDayStyle: estilo do dia atual;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;TodaysDate: data de hoje;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;UseAccessibleHeader: quando definido como true os headers do dia serão gerados como &amp;lt;th&amp;gt;, é o padrão, quando definido como false serão gerados &amp;lt;td&amp;gt;;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;VisibleDate: define qual data será exibida quando o calendário for exibido;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;WeekendDayStyle: estilo dos dias de final de semana.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O Calendar também possui eventos para se trabalhar. O evento primário é o &lt;b&gt;SelectionChanged&lt;/b&gt;, ele causa um potback e é disparado no momento em que o usuário seleciona uma nova data no calendário. Dentro desta evento é possivel receber a data selecionada através da propriedade &lt;b&gt;SelectedDate&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Outro evento é o &lt;b&gt;VisibleMonthChanged&lt;/b&gt; que também causa um postback e é disparado no momento em que o usuário altera o mês que esta visivel no calendário.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O calendar é tipicamente usado como um selecionador de datas, mas pode ser usado para exibir tarefas agendadas.Utilizando o evento &lt;b&gt;DayRender&lt;/b&gt;, que é disparado no momento em que o calendário esta sendo criado e irá ser renderizado no html a cada dia do mês, você pode adicionar controles como um label junto com o dia do calendário.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O código abaixo demonstra como exibir as informações em texto de datas especiais junto com o dia no calendário.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;private Dictionary&amp;lt;DateTime, string&amp;gt; scheduleData = new Dictionary&amp;lt;DateTime,string&amp;gt;(5);&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; // Load the schedule (which would be read from a database)&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; scheduleData.Add(new DateTime(2011, 1, 9), "Vacation Day");&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;scheduleData.Add(new DateTime(2011, 1, 18), "Budget planning meeting");&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;scheduleData.Add(new DateTime(2011, 2, 5), "Conference call");&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;scheduleData.Add(new DateTime(2011, 2, 10), "Meet with art director");&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;scheduleData.Add(new DateTime(2011, 2, 15), "Vacation day");&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Calendar1.Caption = "Personal Schedule";&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.FirstDayOfWeek = FirstDayOfWeek.Sunday;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.NextPrevFormat = NextPrevFormat.ShortMonth;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.TitleFormat = TitleFormat.MonthYear;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.ShowGridLines = true;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.DayStyle.HorizontalAlign = HorizontalAlign.Left;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.DayStyle.VerticalAlign = VerticalAlign.Top;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.DayStyle.Height = new Unit(75);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.DayStyle.Width = new Unit(100);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.OtherMonthDayStyle.BackColor = System.Drawing.Color.Cornsilk;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.TodaysDate = new DateTime(2011, 1, 1);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.VisibleDate = Calendar1.TodaysDate;&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;protected void Calendar1_SelectionChanged(object sender, EventArgs e)&lt;br /&gt;{&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;ActionLabel.Text = string.Format("Selection changed to: {0}",&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt; &lt;/i&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Calendar1.SelectedDate.ToShortDateString());&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)&lt;br /&gt;{&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp; ActionLabel.Text = string.Format("Month changed to: {0}", e.NewDate.ToShortDateString());&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)&lt;br /&gt;{&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;if (scheduleData.ContainsKey(e.Day.Date))&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp; {&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Literal lit = new Literal();&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;lit.Text = "&amp;lt;br /&amp;gt;";&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;e.Cell.Controls.Add(lit);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Label lbl = new Label();&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;lbl.Text = (string)scheduleData[e.Day.Date];&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;lbl.Font.Size = new FontUnit(FontSize.Small);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;e.Cell.Controls.Add(lbl);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Este código define no evento Page_Load algumas propriedades do calendário, e utiliza o evento Calendar1_DayRender para fazer a verificação se a data é uma data especiail para ser exibida. Veja o resultado:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RMq-ApQIq2k/TihShK_RWeI/AAAAAAAAADE/aW6zgfD688U/s1600/calendario.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/-RMq-ApQIq2k/TihShK_RWeI/AAAAAAAAADE/aW6zgfD688U/s400/calendario.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The FileUpload Control&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle FileUpload permite ao usuário fazer o upload de arquivos para o servidor. Este controle exibe um textbox e um botão. O usuário pode informar o caminho completo do arquivo ou clicar no botão e navegar pelo browser até encontrar o arquivo desejado.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Sua tag no asp.net é &lt;b&gt;&amp;lt;asp:FileUpload&amp;gt;&lt;/b&gt; quando renderizado no html ele gera um &lt;b&gt;&amp;lt;input type="file"&amp;gt;&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O FileUpload não ocasiona postback de forma automática, somente é feito o postback por intervenção de outro controle como um botão de enviar/gravar ou outro.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;As propriedade para acessar o arquivo são:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;FileBytes: Expõe o arquivo como um array de byte;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;FileContent: Expõe o arquivo como stream;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;PostedFile: Expõe o arquivo como objeto do tipo &lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;HttpPostedFile. Este objeto contém outras propriedades como&lt;span style="font-size: small;"&gt; ContentType e ContentLength.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;É importante que você fala uma análisa do arquivo que esta sendo enviado para o servidor. Você pode analisar características como nome do arquivo, tamanho e tipo. Quando estiver tudo ok, utiliza o método SaveAs para completar o upload.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;O tamanho máximo do arquivo que pode ser utilizado é configurado pelo atributo MaxRequestLength que fica no elemento httpRuntime no arquivo web.config. Se o usuário tentar postar algo maior do que o delimitado o upload irá falhar.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;No exemplo a baixo foi criado uma página com um FileUpload e um botão para salvar o arquivo em uma pasta chamada Uploads:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;protected void Button1_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (FileUpload1.HasFile)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = string.Format("File Length: {0}&amp;lt;br /&amp;gt;File Name: {1}&amp;lt;br /&amp;gt;MIME Type: {2}",&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileUpload1.FileBytes.Length, FileUpload1.FileName, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;FileUpload1.PostedFile.ContentType);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FileUpload1.SaveAs(MapPath("~/Uploads/" + FileUpload1.FileName));&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = "No file received.";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;Como resultado, após clicar no botão submit o arquivo será salva na pasta destino e exibirá suas popriedades na label:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DfwKqWyuyaA/TimnTRw4SaI/AAAAAAAAADU/bLkDR2fQcAY/s1600/fileUpload.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://2.bp.blogspot.com/-DfwKqWyuyaA/TimnTRw4SaI/AAAAAAAAADU/bLkDR2fQcAY/s400/fileUpload.png" width="400" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Panel Control&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;O Panel é usado como um container. Ele é útil quando você precisar agrupar um grupo de controles. O exemplo mais comum é colocar vários controles dentro dele e conseguir esconder e exibir todos alterando somente a propriedade visible do Panel.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;No asp.net sua tag é &lt;b&gt;&amp;lt;asp:Panel&amp;gt;&lt;/b&gt; quando renderizado no html será gerado uma &lt;b&gt;&amp;lt;div&amp;gt;&lt;/b&gt;. Algumas propriedades do Panel:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;BackImageUrl&lt;/b&gt;: Usado para exibir uma imagem de fundo no Panel;&lt;/li&gt;&lt;li&gt;&lt;b&gt;HorizontalAlignment&lt;/b&gt;: Define o alinhamento horizontal dos controles que estão dentro do Panel;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Wrap&lt;/b&gt;: Especifica se os controles que estão dentro do Panel continuam na próxima linha quando acabar o espaço da linha.&lt;/li&gt;&lt;li&gt;&lt;b&gt;DefaultButton&lt;/b&gt;: Especifica o botão que será disparado quando o focu estiver no Panel e o usuário pressionar a tecla Enter.&lt;/li&gt;&lt;/ul&gt;No exemplo a seguir com o clique do botão o usuário consegue esconder um grupo de controles que estão dentro do Panel:&lt;br /&gt;&lt;br /&gt;Código aspx:&lt;br /&gt;&lt;i&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form id="form1" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;asp:Button ID="ButtonShowHide" runat="server" Text="Login: hide form"&lt;br /&gt;width="200" onclick="ButtonShowHide_Click"/&amp;gt;&lt;br /&gt;&amp;lt;asp:Panel ID="Panel1" runat="server" BackColor="Beige" Width="200"&amp;gt;&lt;br /&gt;&amp;lt;asp:Label ID="Label1" runat="server" Text="User name: "&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;asp:TextBox ID="TextBox1" runat="server"&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;asp:Label ID="Label2" runat="server" Text="Password: "&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;asp:TextBox ID="TextBox2" runat="server"&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;lt;asp:Button ID="ButtonLogin" runat="server" Text="Login" /&amp;gt;&lt;br /&gt;&amp;lt;/asp:Panel&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;Código c#:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void ButtonShowHide_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Panel1.Visible = !Panel1.Visible;&lt;br /&gt;&amp;nbsp; if (Panel1.Visible)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ButtonShowHide.Text = "Login: hide form";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ButtonShowHide.Text = "Login: show form";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;Neste exemplo clicando no botão o usuário ira alterar em esconder e exibir os controles de login.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The MultiView and View Controls&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Assim como o Panel, os controles de MultiView e View trabalham como container para agrupar controles. A MultiView funciona como container da View, que por sua vez é o container dos demais controles. Dentro de uma MultiView podem contar várias Views. Esses controles foram criados para trabalhar juntos e não podem ser usados separadamente.&lt;br /&gt;&lt;br /&gt;Você deve usar a propriedade &lt;b&gt;ActiveViewIndex&lt;/b&gt; ou o método &lt;b&gt;SetActiveView&lt;/b&gt; para definir qual View é exibida. Se o &lt;b&gt;ActiveViewIndex&lt;/b&gt; for definido como -1, nenhum controle de View será exibido, se for passada uma View inválida ou null para o método &lt;b&gt;SetActiveView&lt;/b&gt; uma exception será disparada. Repare que somente uma View pode estar ativa por vez.&lt;br /&gt;&lt;br /&gt;Um exemplo útil do uso desses controles é a criação de wizards, onde por exemplo um usuário deve seguir de 3 a 4 passos para se registrar em um site. Cada passo desse registro pode estar em uma View diferente, veja na imagem:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HyVivxw_mLg/Ti2XNxLajlI/AAAAAAAAADY/Trl3jRtiXyQ/s1600/MultiView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-HyVivxw_mLg/Ti2XNxLajlI/AAAAAAAAADY/Trl3jRtiXyQ/s400/MultiView.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para gerenciar esta página foram criados command buttons para navegação. Quando o usuário clicar no botão através da propriedade CommandName do CommandEventArgs será possível identificar no evento qual botão foi clicado. Veja o código:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;public partial class ViewControl : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MultiView1.ActiveViewIndex = 0;&lt;br /&gt;&amp;nbsp; }&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; protected void Button_Command(object sender, CommandEventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (e.CommandName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Step1Next":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MultiView1.ActiveViewIndex = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Step2Back":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MultiView1.ActiveViewIndex = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Step2Next":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MultiView1.ActiveViewIndex = 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Step3Back":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MultiView1.ActiveViewIndex = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Finish":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //hide control from user to simulate save&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MultiView1.ActiveViewIndex = -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Quando a página for exibida sera mostrada a primeira View para o usuário como o primeiro passo, e conforme ele for navegando as demais Views vão sendo exibidas e outras escondidas:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-O3nm-iZ00ak/Ti2YVq3LYiI/AAAAAAAAADc/GelBcgm6Bhw/s1600/MultiViewResult.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://2.bp.blogspot.com/-O3nm-iZ00ak/Ti2YVq3LYiI/AAAAAAAAADc/GelBcgm6Bhw/s400/MultiViewResult.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Wizard Control&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O&lt;span style="font-size: large;"&gt;&lt;b&gt; &lt;/b&gt;&lt;span style="font-size: small;"&gt;controle Wizard é um controle complexo que agrega controles para que o usuário possa de forma continua inserir informações em sua webpage. O Wizard funciona de forma semelhante aos controles de MultiView e View explicados anteriormente. A idéia dele é criar um passo a passo lógico de um processo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O que é feito com o Wizard pode muito bem ser feito com várias páginas, mas esta é a diferença principal, com o Wizard você centraliza tudo em uma unica página, facilitando o processo de desenvolvimento.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O Wizard possui um header para customizar com informações do passo especifico que o usuário esta naquele momento. Possui uma sidebar que irá conter os controles de navegação entre cada passa do Wizard. É possível programar qual passo é exibido, não obrigando o usuário a passar em todos os passos de forma linear caso não queira.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O que determina qual botão é exibido ou não é a propriedade &lt;b&gt;StepType&lt;/b&gt; da classe &lt;b&gt;BaseWizardStep&lt;/b&gt;. Os valores disponíveis são:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;WizardStepType.Auto&lt;/b&gt;: este é o valor padrão. Os botões são renderizados com base na localização do passo dentro da coleção do Wizard;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;WizardStepType.Complete&lt;/b&gt;: este é o passo final da coleção de passos, os botões de Final e Anterior serão exibidos;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;WizardStepType.Start&lt;/b&gt;: este é o primeiro passo, e somente o botão de próximo irá aparecer;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;WizardStepType.Step&lt;/b&gt;: este é um passo intermediário, os botões de Próximo e Anterior são renderizados.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;No exemplo a seguir o controle de Wizard é montado para dar opção do usuário escolher alguns itens do seu veículo. Os passos criados no Wizard são: Exterior, Interior, Opcionais, and Resumo. No Exterior contem 3 RadioButtons para escolher a cor externa: vermelho, azul ou preto. No passo do Interior contém 2 RadioButton para escolher se quer banco de couro ou de pano. Nos Opcionais contém CheckBox para escolher: Rádio, Bancos Aquecidos e Ar-Condicionado. No Resumo tem uma Label que é populada com as opções escolhidas. Veja como ficou:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-NlqnMhXfTfo/TkCpNcHv7KI/AAAAAAAAADg/nPtE6h-DtHs/s1600/wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-NlqnMhXfTfo/TkCpNcHv7KI/AAAAAAAAADg/nPtE6h-DtHs/s400/wizard.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Após cada passo do Wizard ser criado, foi criado um código para popular a Label quando chegar ao Resumo, também foi adicionado código no evento Page_Load da página para determinar o primeiro passo do Wizard. E no evento Wizard1_FinishButtonClick foi adicionado código para exibir os resultados na label.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (!IsPostBack)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wizard1.ActiveStepIndex = 0;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; Wizard1.Visible = false;&lt;br /&gt;&amp;nbsp; Response.Write(string.Format("Finished&amp;lt;br /&amp;gt;{0}", Label1.Text));&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&lt;br /&gt;protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (Wizard1.WizardSteps[e.NextStepIndex].Title == "Summary")&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder sb = new StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (WizardStep ws in Wizard1.WizardSteps)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Control c in ws.Controls)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (c is CheckBox)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CheckBox cb = (CheckBox)c;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (cb.Checked)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sb.AppendFormat("{0}&amp;lt;br /&amp;gt;", cb.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = sb.ToString();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Quando a página for exibida, o primeiro passo será exibido ao usuário (Exterior), o usuário pode ir passo a passo ou ir direto para o passo final clicando em Finish. Quando clicar no Finish o controle de Wizard será escondido e irá aparecer o Resumo onde a Label é populada com as opções escolhidas.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Xml Control&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O controle Xml é utilizado para exibir o conteúdo de arquivos Xml. Este controle é bastante útil quando seus dados estão armazenados em arquivo Xml e você precisa executar uma transformação para Extensible Stylesheet Language (XSL). Os dados podem ser renderizados e exibidos para o usuário utilizando o controle Xml.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;O documento Xml será exibido se especificada a propriedade &lt;b&gt;DocumentSource&lt;/b&gt; ou a propriedade &lt;b&gt;DocumentContent&lt;/b&gt;. A propriedade DocumentSource aceita uma string que contém o caminho do arquivo Xml a ser carregado. A propriedade DocumentContent aceita uma string com o conteúdo do Xml.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;A propriedade &lt;b&gt;TransformSource&lt;/b&gt; aceita &lt;/span&gt;&lt;/span&gt;um parâmetro opcional que contém o caminho de um arquivo XSL que será aplicado ao Xml. Esta propriedade também aceita um objeto do tipo &lt;b&gt;Transform&lt;/b&gt;. O controle Xml contém a propriedade &lt;b&gt;TransformArgumentList&lt;/b&gt; que aceita parâmetros que serão passados para a transformação XSL.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;No código a seguir o controle Xml é utilizado para exibid o contéudo de um arquivo Xml após uma transformação XSL é aplicada. A seguir o arquivo Xml e o arquivo XSL:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Arquivo XML: ProductList.xml&lt;/b&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;ProductList&amp;gt;&lt;br /&gt;&amp;lt;Product Id="1A59B" Department="Sporting Goods" Name="Baseball" Price="3.00" /&amp;gt;&lt;br /&gt;&amp;lt;Product Id="9B25T" Department="Sporting Goods" Name="Tennis Racket" Price="40.00" /&amp;gt;&lt;br /&gt;&amp;lt;Product Id="3H13R" Department="Sporting Goods" Name="Golf Clubs" Price="179.00" /&amp;gt;&lt;br /&gt;&amp;lt;Product Id="7D67A" Department="Clothing" Name="Shirt" Price="12.00" /&amp;gt;&lt;br /&gt;&amp;lt;Product Id="4T21N" Department="Clothing" Name="Jacket" Price="45.00" /&amp;gt;&lt;br /&gt;&amp;lt;/ProductList&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Arquivo XSL: ProductList.xsl&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0"&lt;br /&gt;xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&lt;br /&gt;xmlns:msxsl="urn:schemas-microsoft-com:xslt"&lt;br /&gt;xmlns:labs="http://labs.com/mynamespace"&amp;gt;&lt;br /&gt;&amp;lt;xsl:template match="/"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Product List&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;center&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;Product List&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;xsl:call-template name="CreateHeading"/&amp;gt;&lt;br /&gt;&amp;lt;/center&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;xsl:template name="CreateHeading"&amp;gt;&lt;br /&gt;&amp;lt;table border="1" cellpadding="5"&amp;gt;&lt;br /&gt;&amp;lt;tr &amp;gt;&lt;br /&gt;&amp;lt;th bgcolor="yellow"&amp;gt;&lt;br /&gt;&amp;lt;font size="4" &amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;Id&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;lt;/font&amp;gt;&lt;br /&gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th bgcolor="yellow"&amp;gt;&lt;br /&gt;&amp;lt;font size="4" &amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;Department&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;lt;/font&amp;gt;&lt;br /&gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th bgcolor="yellow"&amp;gt;&lt;br /&gt;&amp;lt;font size="4" &amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;Name&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;lt;/font&amp;gt;&lt;br /&gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th bgcolor="yellow"&amp;gt;&lt;br /&gt;&amp;lt;font size="4" &amp;gt;&lt;br /&gt;&amp;lt;b&amp;gt;Price&amp;lt;/b&amp;gt;&lt;br /&gt;&amp;lt;/font&amp;gt;&lt;br /&gt;&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;xsl:call-template name="CreateTable"/&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;xsl:template name="CreateTable"&amp;gt;&lt;br /&gt;&amp;lt;xsl:for-each select="/ProductList/Product"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td align="center"&amp;gt;&lt;br /&gt;&amp;lt;xsl:value-of select="@Id"/&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td align="center"&amp;gt;&lt;br /&gt;&amp;lt;xsl:value-of select="@Department"/&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&lt;br /&gt;&amp;lt;xsl:value-of select="@Name"/&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td align="right"&amp;gt;&lt;br /&gt;&amp;lt;xsl:value-of select="format-number(@Price,'$#,##0.00')"/&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Para exibir o resultado foi adicionado um controle Xml na página e o código a seguir:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;public partial class XmlControlVb : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xml1.DocumentSource = "~/App_Data/ProductList.xml";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xml1.TransformSource = "~/App_Data/ProductList.xsl";&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Quando a página é exibida os arquivos são carregados e o resultado:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-uA4K6l6Hr9M/Tkm1M0fWIMI/AAAAAAAAAD4/HuJaZhQWWhE/s1600/Xml.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-uA4K6l6Hr9M/Tkm1M0fWIMI/AAAAAAAAAD4/HuJaZhQWWhE/s400/Xml.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-size: large;"&gt;&lt;span style="font-size: small;"&gt;Com o controle Xml encerra o capítulo 4!!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-8572792652574358388?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/8572792652574358388/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/08/capitulo-4-using-server-controls-licao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/8572792652574358388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/8572792652574358388'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/08/capitulo-4-using-server-controls-licao.html' title='Capítulo 4: Using Server Controls Lição 2: Exploring Specialized Server Controls'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-FELxara-zq4/Th3KNPDKJAI/AAAAAAAAAC8/nXdlXLMiXrU/s72-c/table.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4369179559278171054</id><published>2011-06-15T16:41:00.000-07:00</published><updated>2011-06-15T16:41:17.450-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CheckBox'/><category scheme='http://www.blogger.com/atom/ns#' term='controles'/><category scheme='http://www.blogger.com/atom/ns#' term='TextBox'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='Button'/><category scheme='http://www.blogger.com/atom/ns#' term='RadioButton'/><category scheme='http://www.blogger.com/atom/ns#' term='Label'/><category scheme='http://www.blogger.com/atom/ns#' term='ListBox'/><category scheme='http://www.blogger.com/atom/ns#' term='DropDownList'/><category scheme='http://www.blogger.com/atom/ns#' term='Literal'/><category scheme='http://www.blogger.com/atom/ns#' term='controls'/><title type='text'>Capítulo 4: Using Server Controls Lição 1: Exploring Common Server Controls</title><content type='html'>D&lt;span style="font-family: inherit;"&gt;epois da correria, deu um tempo de voltar a estudar&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Esta lição fala sobre os controles básico que usamos na web. Como postei no twitter, não deixa de ser interessante, muitas coisas que na prática não observamos, acabamos descobrindo quando pegamos um pouco de teoria.&lt;br /&gt;&lt;br /&gt;Esta lição fala sobre alguns dos controles do asp.net, que a cada versão lança mais controles para poder disponibilizar ao usuário final do sistema ou site uma experiência cada vez mais rica.&lt;br /&gt;&lt;br /&gt;Os controles do asp.net herdam a classe WebControl, diferente dos controles HTML. Os controles asp.net facilitam a manipulação dos mesmos do lado do servidor, porém o resultado final para o cliente sera sempre html, os controles do asp.net quando renderizados no browser são renderizados como controles html comuns.&lt;br /&gt;&lt;br /&gt;Um controle asp.net proporciona mais funcionalidades do que controles html, outra vantagem interessante é que eles tem a capacidade de detectar a capacidade do navegador e renderizar o código ideal para aproveitar o potencial do navegador. Além disso existem controles asp.net que não tem controles correspondente no html, são controles que surgiram para facilitar em algumas tarefas como o Calendar, Wizard, e a GridView.&lt;br /&gt;&lt;br /&gt;A lição lista e explica as propriedades que são comuns nos controles asp.net. Não irei explicar cada uma, apenas colocarei aqui as que foram destacadas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;AccessKey&lt;/li&gt;&lt;li&gt;BackColor&lt;/li&gt;&lt;li&gt;BorderColor&lt;/li&gt;&lt;li&gt;BorderWidth&lt;/li&gt;&lt;li&gt;BorderStyle&lt;/li&gt;&lt;li&gt;CssClass&lt;/li&gt;&lt;li&gt;Style&lt;/li&gt;&lt;li&gt;Enabled&lt;/li&gt;&lt;li&gt;EnableTheming&lt;/li&gt;&lt;li&gt;EnableViewState&lt;/li&gt;&lt;li&gt;Font&lt;/li&gt;&lt;li&gt;ForeColor&lt;/li&gt;&lt;li&gt;Height&lt;/li&gt;&lt;li&gt;SkinID&lt;/li&gt;&lt;li&gt;TabIndex&lt;/li&gt;&lt;li&gt;ToolTip&lt;/li&gt;&lt;li&gt;Width&lt;/li&gt;&lt;/ul&gt;Apesar de existirem essas propriedades, onde a maioria é sobre o estilo do controle é recomenado o uso de uma folha de estilo, CSS, como já mostrado em lições anteriores.&lt;br /&gt;&lt;br /&gt;A lição fala sobre a atualização de versões anteriores. O engine de renderização do asp.net 3, diferente do asp.net 3.5 e do 4. Claro que o objetivo é sempre melhorar, e fazer com que os códigos htmls renderizados para o usuário final sejam mais rápidos e eficientes. Porém quando migramos uma aplicação/site do asp.net 3.5 por exemplo para o 4, devido essa diferença do engine alguns itens em nossas páginas podem mudar. &lt;b&gt;O que fazer?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Existem duas soluções, a ideal, revisar seu código asp.net e ver o que mudou para ser melhor aproveitado. Porém como sabemos que nem sempre isso é possível, temos a opção de definir que nossa aplicação continuará usando o engine do framework 3.5. Pode fazer isso definindo no arquivo web.config:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;lt;pages controlRenderingCompatibilityVersion="3.5"/&amp;gt;&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Outro aspecto que é interessante ressaltar é que os controles do asp.net renderizam códigos html utilizando &lt;b&gt;tabelas&lt;/b&gt;, como sabemos que é algo ultrapassado você tem a opção de alterar a propriedade &lt;b&gt;RenderOuterTable&lt;/b&gt; para &lt;b&gt;false&lt;/b&gt;, onde desta forma tudo sera renderizado conforme você trabalhou na sua folha de estilo.&lt;br /&gt;&lt;br /&gt;Vamos aos controles desta lição:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;O controle &lt;/b&gt;&lt;b&gt;Label &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O controle Label é utilizado quando você precisa exibir um texto em um determinado local de sua página, porém só utilize o controle Label do asp.net se precisa que seu valor seja dinâmico, quando é necessário altera-lo em tempo de execução, caso contrário utilize um texto estático do html que irá consumir menos recurso.&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;O controle Label é muito utilizado em formulários de preenchimento de dados, onde costumamos colocar o label a esquerda e os controles de textbox a direita por exemplo. Como os labels são muito comuns nesses casos, você pode definir teclas de atalhos do teclado para os labels. Por exemplo quando ele pressionar (Alt + U) ir para o textbox "Usuário'. Isto é muito útil com usuário que já tem uma experiências com teclado e não costumam utilizar o mouse, mas principalmente por questão de &lt;b&gt;acessibilidade&lt;/b&gt;, pois nem todos os usuário hoje tem capacidade de controlar um mouse.&lt;br /&gt;&lt;br /&gt;Para fazer esta associação da label e dos textbox a teclas de atalhos siga os passos:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Adicione um controle Label e um Textbox;&lt;/li&gt;&lt;li&gt;Defina a propriedade &lt;b&gt;AccessKey&lt;/b&gt; da label para a letra que ativará o atalho, neste exemplo use a letra &lt;b&gt;U&lt;/b&gt;;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;Na propriedade &lt;b&gt;Text&lt;/b&gt; da label coloque: &amp;lt;u&amp;gt;U&amp;lt;/u&amp;gt;suário, desta forma irá renderizar: &lt;u&gt;U&lt;/u&gt;suário;&lt;/li&gt;&lt;li&gt;Na propriedade &lt;b&gt;AssociatedControlID&lt;/b&gt; coloquei o ID do seu Textbox;&lt;/li&gt;&lt;/ol&gt;O que acontecerá? Quando o usuário estiver nessa página e pressionar (Alt + U) automaticamente o textbox de usuário irá receber o foco.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;O controle Literal &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;O Literal deve ser utilizado quando deseja adicionar HTML puro em sua página, apesar da idéia parecer semelhante ao Label, o Literal não herda de WebControl e não acrescenta qualquer elemento html a página, onde já o label acrescenta um &amp;lt;span&amp;gt; em sua página.&lt;br /&gt;&lt;br /&gt;O Literal contém a propriedade &lt;b&gt;Mode&lt;/b&gt; que é especificada a forma com que o conteúdo do Literal será tratado na página web. Existem 3 opções:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PassThrough: O texto será processado como ele foi passado ao Literal executando códigos htmls e até mesmo scripts que serã processados pelo navegador.&lt;/li&gt;&lt;li&gt;Encode: O conteúdo do texto é tratado como texto puro e não é processado como html ou scripts.&lt;/li&gt;&lt;li&gt;Transform: O conteúdo do texto é convertido para a linguagem do navegador podendo ser HTML, &lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps atn" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;XHTML&lt;/span&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps atn" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;WML&lt;/span&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt; ou &lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps atn" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;cHTML&lt;/span&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;. Onde nesses casos tags inválidas são removidas automaticamente.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;&amp;nbsp;Abai&lt;span style="font-size: small;"&gt;&lt;span style="font-family: inherit;"&gt;xo exemplo d&lt;/span&gt;&lt;/span&gt;e código e uma imagem de como o navegador processa ambos os casos:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;Literal1.Text =@"This is an &amp;lt;font size=7&amp;gt;example&amp;lt;/font&amp;gt;"+&lt;br /&gt;"&amp;lt;script&amp;gt;alert(""Hi from Literal1"");&amp;lt;/script&amp;gt;";&lt;br /&gt;Literal2.Text =@"This is an &amp;lt;font size=7&amp;gt;example&amp;lt;/font&amp;gt;"+&lt;br /&gt;"&amp;lt;script&amp;gt;alert(""Hi from Literal2"");&amp;lt;/script&amp;gt;";&lt;br /&gt;Literal3.Text =@"This is an &amp;lt;font size=7&amp;gt;example&amp;lt;/font&amp;gt;"+&lt;br /&gt;"&amp;lt;script&amp;gt;alert(""Hi from Literal3"");&amp;lt;/script&amp;gt;";&lt;br /&gt;Literal1.Mode = LiteralMode.Encode;&lt;br /&gt;Literal2.Mode = LiteralMode.PassThrough;&lt;br /&gt;Literal3.Mode = LiteralMode.Transform;&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;Resultado:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt; &lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" height="449" src="data:image/png;base64,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" width="640" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;O controle TextBox &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;Este é o que tem menos segredos dos citados pela lição. A lição explica as três propriedades de &lt;b&gt;TextMode&lt;/b&gt;, onde a primeira e a padrão é SingleLine, MultiLine (onde conforme for digitando informação o textbox vai aumentado suas linhas e criando uma barra de rolagem) e Password (onde as informações digitadas recebem uma mascara para não exibir o que esta sendo digitado).&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;O TextBox possui o evento padrão &lt;b&gt;TextChanged&lt;/b&gt; que é acionado quando o valor o texto é alterado, porém vale ressaltar que ele so irá executar o evento no servidor se a propriedade AutoPostBack estiver como &lt;b&gt;true&lt;/b&gt; ou quando outro controle efetuar o Postback.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: inherit;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;O controle CheckBox &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;O controle CheckBox é utilizado quando queremos disponibilizar ao usuário a escolha ou não de algo. Simplesmente a opção de Sim ou Não. Utilize a propriedade &lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;TextAlign&lt;/span&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt; para definir em qual lado da caixa de seleção ficará o texto. A propriedade &lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Checked é utilizada para definir e obter o status do checkbox.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Assim como o textBox o CheckBox possui o evento &lt;b&gt;CheckedChanged&lt;/b&gt; que é ativado quando seu valor é alterado, vale lembrar a mesma observação da propriedade AutoPostBack.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;O controle RadioButton &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Pensando que o CheckBox é um controle que da a opção de Sim e Não ao usuário, o controle RadioButton oferece várias opções para o usuário escolher uma sobre determinado grupo de itens. Para agrupar vários RadioButtons e garantir que somente um seja escolhido especifique o nome do grupo para todos eles, usando a propriedade &lt;b&gt;GroupName&lt;/b&gt;. Para que exista um padrão, defina a propriedade Checked para true do RadioButton desejado.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Outra opção ao invés de criar vários RadioButton é criar um RadioButtonList e adicionar seus itens.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;As duas técnicas mencionadas acima são chamadas de &lt;b&gt;Payment Type&lt;/b&gt; quando são usados vários controles RadioButton e &lt;b&gt;Shipping Type&lt;/b&gt; quando é implementado um RadioButtonList.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;O controle DropDownList&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A intenção do DropDownList é a mesma do RadioButtonList, oferecer diversas opções para o usuário, a grande diferente é que o RadioButtonList exibe todas na tela, ja o DropDownList as opções ficam ocultas até que o usuário clique no controle e exiba todas as opções. O DropDownList deve ser escolhido quando existir um grande número de opções.&lt;br /&gt;&lt;br /&gt;Caso não defina qual dos itens será o padrão o asp.net automaticamente deixará o primeiro item como padrão e já vira selecionado.&lt;br /&gt;&lt;br /&gt;Você pode popular um DropDownList utilizando o método DropDownList.Items.Add passando como parâmetro uma &lt;b&gt;string&lt;/b&gt; ou uma instância do objeto &lt;b&gt;ListItem&lt;/b&gt;. Veja o exemplo no código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;for (int i = 1900; i &amp;lt; DateTime.Now.Year; i++)&lt;br /&gt;{&lt;br /&gt;BirthYearDropDownList.Items.Add(i.ToString());&lt;br /&gt;}&lt;br /&gt;if (!IsPostBack)&lt;br /&gt;{&lt;br /&gt;BirthYearDropDownList.SelectedIndex = 85;&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Manipule o evento &lt;b&gt;SelectedIndexChanged&lt;/b&gt; para executar algo quando o usuário selecionar algum item. Para verificar qual item esta selecinado utilize a propriedade &lt;b&gt;SelectedValue.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;O controle ListBox&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;O ListBox é como um CheckBoxList que permite ao usuário selecionar nenhum ou vários itens, assim como o DropDownList sua vantagem é que os dados ficam reduzidos não sendo exibidas todas as opções, ele cria uma barra de rolagem para navegar entre as opções.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Por padrão o ListBox permite ao usuário selecionar apenas uma opção, mas você pode alterar a propriedade &lt;b&gt;SelectionMode&lt;/b&gt; para &lt;b&gt;Multiple&lt;/b&gt;, permitindo assim selecionar várias opções. A dificuldade é que o usuário entenda como selecionar mais de um item, para isso ele deve manter a tecla Ctrl pressinada e escolher os itens desejados.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;O controle Button&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;O Button renderiza um botão comum na página que serve para executar um postback ao servidor. Existe duas formas de fazer isso, a padrão que é executando um submit, através do evento click do botão, como já foi explicado em lições anteriores. E um botão de comando.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Caso você tenha vários botões na sua página com funções semelhantes ao invés de criar o evento clique para cada botão, pode criar um único evento de comando que será executado por todos os botões. Defina o mesmo evento &lt;b&gt;OnCommand&lt;/b&gt; para todos e defina a propriedade &lt;b&gt;CommandName&lt;/b&gt; distinta para cada botão, que será a forma de identificar qual foi o botão clicado.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Exemplo:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;&amp;lt;asp:Button ID="back" runat="server" oncommand="Button_Command" Text="Back" CommandName="Back" /&amp;gt;&lt;br /&gt;&amp;lt;asp:Button ID="up" runat="server" oncommand="Button_Command" Text="Up" CommandName="Up" /&amp;gt;&lt;br /&gt;&lt;br /&gt;protected void Button_Command(object sender, CommandEventArgs e)&lt;br /&gt;{&lt;br /&gt;switch (e.CommandName)&lt;br /&gt;{&lt;br /&gt;case "Back":&lt;br /&gt;FeedbackLabel.Text = "Back";&lt;br /&gt;break;&lt;br /&gt;case "Up":&lt;br /&gt;FeedbackLabel.Text = "Up";&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Simples e útil!!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Saindo um pouco dos principais controles do asp.net a lição mostra também como tornar controles html controles de servidor. Em resumo a grande verdade é, basta definir a propriedade &lt;b&gt;ID &lt;/b&gt;e adicionar a propriedade &lt;b&gt;runat="server"&lt;/b&gt;. Mesmo que seja uma simples div html, executando este processo você conseguirá acessar esta div pelo seu código c# e manipula-la pelo servidor.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;A lição até mostra uma página asp, migrando para asp.net sem trocar os controles:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Asp:&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Customer Page&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form name="Form1" method="post" action="update.asp" id="Form1" &amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="CustomerName"&lt;br /&gt;id="CustomerName" &amp;gt;&lt;br /&gt;&amp;lt;input type="submit" name="SubmitButton"&lt;br /&gt;value="Submit" id="SubmitButton" &amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Asp.NET:&lt;/b&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Customer Page&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form name="Form1" method="post" id="Form1" runat=”server”&amp;gt;&lt;br /&gt;&amp;lt;input type="text" name="CustomerName"&lt;br /&gt;id="CustomerName" runat=”server” &amp;gt;&lt;br /&gt;&amp;lt;input type="submit" name="SubmitButton"&lt;br /&gt;value="Submit" id="SubmitButton" runat=”server”&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Repare que existe uma mudança na tag &lt;b&gt;form &lt;/b&gt;também. Claro que isso limita um pouco sua página, pois o uso de controles asp.net deixará sua aplicação mais rica. Porém como vimos é possível.&lt;br /&gt;&lt;br /&gt;Assim fechamos este primeira lição do Capítulo 4.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4369179559278171054?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4369179559278171054/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/06/capitulo-4-using-server-controls-licao.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4369179559278171054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4369179559278171054'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/06/capitulo-4-using-server-controls-licao.html' title='Capítulo 4: Using Server Controls Lição 1: Exploring Common Server Controls'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-5905510489476380503</id><published>2011-05-19T20:23:00.000-07:00</published><updated>2011-05-19T20:23:50.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='sessões'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='state management'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Capítulo 3: Handling Events and Managing State Lição 3: Using Server-Side State Management</title><content type='html'>Do contrário da lição 2, a lição 3 mostra as técnicas de gerenciamento de sessão no servidor. Você deve gerenciar os estados no servidor quando existe uma quantidade grande de dados e se torna oneroso a ida e vinda desses dados entre o cliente e o servidor. Outro grande motivo é a segurança, podemos trabalhar com dados sigilosos que não podem correr o risco de ficar disponível na máquina do cliente.&lt;br /&gt;&lt;br /&gt;O asp.net disponibiliza duas formas de gerenciar pelo servidor, essas formas já foram citadas em lições anteriores. Os métodos são &lt;b&gt;Application State&lt;/b&gt; e &lt;b&gt;Session State&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;O primeiro é global, ou seja, os dados são acessados por todos os usuário em qualquer página. Os dados armazenados no &lt;b&gt;Application State&lt;/b&gt; são os mesmos para todos os usuários. Já o segundo método &lt;b&gt;Session State&lt;/b&gt; é único por cada usuário, cada usuário tem a sua sessão, da mesma forma que o Application State os dados armazenados em Session State são acessados em qualquer página.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Application State&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Os dados armazenados no Application State são globais e podem ser acessados em qualquer requisição de qualquer página. A classe &lt;b&gt;HttpApplicationState&lt;/b&gt; é um dicionário de chave e valor e pode ser acessado pelo nome do chave. Os dados armazenados no Application State não são permanentes, no momento em que a aplicação é reiniciada, por exemplo quando o IIS ou o servidor é iniciado os dados armazenados neste sessão são perdidos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Session State&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;Os dados armazenados com &lt;b&gt;Session State&lt;/b&gt; também podem ser acessados de qualquer página, a grande diferença é que é único por usuário (browser). Por padrão esses dados são armazenados na memória do servidor, mas é possível&amp;nbsp; é configurar para utilizar cookies, em State Serve ou em um banco de dados.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;De forma similar ao Application State, o Session State é um dicionário de chave e valor, como demonstra o código:&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;// Caso a sessão não exista&lt;br /&gt;if (Session["lastVisit"] != null)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = ((DateTime)Session["lastVisit"]).ToString();&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = "Session does not have last visit information.";&lt;br /&gt;}&lt;br /&gt;// Definindo um valor para a sessão&lt;br /&gt;Session["lastVisit"] = DateTime.Now;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Caso queira desabilitar o uso de sessões pode fazer no web.config:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;lt;sessionState mode="off"/&amp;gt;&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Ou&amp;nbsp;&lt;i&gt; &lt;/i&gt;definir na diretiva da página no caso de desabilitar em páginas especificas, utilizando a propriedade EnableSessionState:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"&lt;br /&gt;Inherits="_Default" EnableSessionState = "False"%&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;É possível configurar a forma com que irá utilizar sua sessão:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;InProc&lt;/b&gt;: é o modo padrão. É o que oferece melhor desempenho em relação as outras opções. No entanto ele fica limitado em cenários de balanceamento de carga entre servidores. Pois não terá como garantir que um usuário comece e termine seu processo no mesmo servidor.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;StateServer: &lt;/b&gt;Nesta configuração os dados armazenados na sessão não são perdidos quando a aplicação é reiniciada, e neste cenário é possível fazer o compartilhamento entre servidores. O StateServer é um serviço do asp.net que esta em qualquer máquina que possua o FrameWork instalado. Este serviço não é configurado para iniciar automaticamente e sim manualmente, por isso deve ser feito essa mudança para que inicie automaticamente caso deseja usar.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;SQLServer&lt;/b&gt;: Tem os mesmos benefícios do StateServer, armazena os dados quando a aplicação é iniciada e&amp;nbsp; pode ser utilizado em vários servidores. Em hardware idêntico o StateServer supera o SQLServer, porém o SQLServer oferece integridade dos dados mais robustos e capacidade de relatórios.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Custom: &lt;/b&gt;Permite que você especifique uma sessão personalizada, necessitando do código para implementar seu armazenamento personalizado.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Off&lt;/b&gt;: Desativa as Sessões, deve utilizar esta opção caso queira desabilitar sessões.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: small;"&gt;Assim se encerra o capítulo III.&lt;br /&gt;&lt;br /&gt;Abraços...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-5905510489476380503?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/5905510489476380503/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/05/capitulo-3-handling-events-and-managing_19.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/5905510489476380503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/5905510489476380503'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/05/capitulo-3-handling-events-and-managing_19.html' title='Capítulo 3: Handling Events and Managing State Lição 3: Using Server-Side State Management'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-1382199373981406880</id><published>2011-05-16T17:11:00.000-07:00</published><updated>2011-05-16T17:11:28.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Hidden Fields'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='View State'/><category scheme='http://www.blogger.com/atom/ns#' term='Query Strings'/><title type='text'>Capítulo 3: Handling Events and Managing State Lição 2: Using Client-Side State Management</title><content type='html'>Esta lição mostra as principais maneiras de gerenciamento de estado do lado do cliente, desta forma economizando recursos do servidor.&lt;br /&gt;&lt;br /&gt;As principais técnicas são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;View state: &lt;/b&gt;O asp.net utiliza para controlar os valores dos controles entre as requisições da página.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Control state:&lt;/b&gt; É possível persistir informações específicas do controle sem utilizar a View State, é muito utilizado em casos de controles personalizados.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Hidden fields:&lt;/b&gt; Como a View State este campo fica no html mas não é renderizado para o usuário &lt;/li&gt;&lt;li&gt;&lt;b&gt;Cookies: &lt;/b&gt;Um cookie fica armazenado no navegador do usuário, para cada requisição que é enviada para o servidor o valor do cookie é enviado também, é a maneira mais recomendada quando é necessário acessar este valor em diferentes páginas do mesmo domínio.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Query strings:&lt;/b&gt; É um valor informado pela url da página, fica visível ao usuário na barra de endereço do browser.&lt;/li&gt;&lt;/ul&gt;Antes de explicar sobre cada uma dessas formas de persistir os dados do lado do cliente, a lição explica vantagens e desvantagens de persistir os dados do lado do servidor e do lado do cliente.&lt;br /&gt;&lt;br /&gt;Persistindo os dados no cliente, as vantagens são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Melhor Escalabilidade:&lt;/b&gt; Caso utiliza-se do lado do servidor, a cada acesso de um cliente/usuário aumenta o uso de memória do servidor. Jogando esta carga para o cliente para um irá absorver o seu acesso e irá ter um grande consumo de recurso do servidor.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Suporte por Múltiplos Servidores:&lt;/b&gt; Caso você necessite de uma grande arquitetura de servidores, obter as informações do cliente que estão no browser será possível por qualquer servidor sem fazer um balanceamento de carga inteligente. Ou seja caso o usuário mude de servidor no meio de uma sessão, basta o servidor acessar os dados que estão no browser.&lt;/li&gt;&lt;/ul&gt;Vantagens de persistir os dados no servidor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;b&gt;Melhor Segurança:&lt;/b&gt; A menos que você assine digitalmente as informações que estão no cliente, qualquer um pode alterar os dados armazenados. Ou seja nunca armazene no cliente dados confidenciais como senhas e níveis de acesso.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Redução de Banda:&lt;/b&gt; Os dados estando no servidor não é necessário o envio e recebimento dessas informações, os dados estando no cliente a cada requisição os dados são enviados ao servidor, utilizando banda do cliente e do seu servidor. O conselho é armazenar pequenas informações no cliente.&lt;/li&gt;&lt;/ul&gt;Qual usar? Agora é você que decide com bases nessas informações. Se você tiver uma aplicação com poucos usuário e informações sigilosas utiliza recursos do servidor. Se quer ganhar performance em sua aplicação utilize as duas formas, sabendo quando usar uma ou outra.&lt;br /&gt;&lt;br /&gt;&lt;b&gt; View State&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;View State é um mecanismo do asp.net para armazenar dados de um usuário entre as requisições da mesma página. A view state não é armazenada no servidor, fica no código html da página, ela armazena estados de exibição dos controles que são acessados entre cada requisição, não consumindo assim recursos do servidor.&lt;br /&gt;&lt;br /&gt;Caso não desabilite a View State é padrão de todas as páginas. Um exemplo, quando faz uma consulta o servidor retorna os dados e o formulário é preenchido, quando o usuário alterar algum campo e clicar no botão gravar por exemplo, caso haja um erro no envio desses dados ao servidor, as informações já digitadas não será perdidas, pois os valores armazenados na View State permaneceram.&lt;br /&gt;&lt;br /&gt;A View State é armazenada da seguinte forma no código html:&lt;br /&gt;&lt;i&gt;&amp;lt;input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"&lt;br /&gt;value="/wEPDwULLTEzNjkxMzkwNjRkZAVvqsMGC6PVDmbCxBlPkLVKNahk" /&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Caso o valor seja muito grande a View State é quebrada em 2 ou quantas for necessária para armazenar&amp;nbsp; o valor. Repare que o valor é um hash e é compactado para oferecer maior segurança e maior performance que um campo hidden comum.&lt;br /&gt;&lt;br /&gt;Como a View State ficar no código html, o usuário consegue modificar estes valores, porém o asp.net possui um código de autenticação que consegue validar se a View State foi alterada ou não.&lt;br /&gt;&lt;br /&gt;Caso queira maior segurança para sua aplicação é possível criptografar suas View State através de uma configuração do Web.config:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;lt;pages viewStateEncryptionMode="Always"/&amp;gt;&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Só que desta forma irá perder um pouco de performance pois toda vez terá que ser feito a criptografia e a descriptografia. Uma alternativa seria criptografar somente as View State que forem realmente necessárias, colocando a diretiva diretamente na página:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" ViewStateEncryptionMode="Always"%&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Como disse por padrão a View State esta habilitada em todas as páginas e para todos os controles. Devido ao trafego de envio e recebimento de informações da View State você pode optar por desabilita-la.&lt;br /&gt;&lt;br /&gt;Caso a página seja acessada por usuário de conexões lentas e sejam páginas com um grande número de controles, a lição especifica mais de 10 controles, vale a pena pensar na hipóteses de desabilita-la. Você deve controlar os dados que são armazenados na View State, para controlar a nível de página utilize as propriedades &lt;b&gt;Page.EnableViewState&lt;/b&gt; e &lt;b&gt;Page.ViewStateMode&lt;/b&gt;, para controles utilize &lt;b&gt;Control.EnableViewState&lt;/b&gt; e &lt;b&gt;Control.ViewStateMode&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;A propriedades &lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;ViewStateMode&lt;/span&gt; &lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;é nova no FrameWork 4 e só terá efeito caso a propriedades &lt;b&gt;EnableViewState &lt;/b&gt;esteja como true. Por padrão a &lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;ViewStateMode &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;da Página tem o valor de &lt;b&gt;Enabled&lt;/b&gt;&lt;/span&gt;&lt;/span&gt; e a propriedades &lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;ViewStateMode&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt; dos controles herdam o valor atribuido a propriedade da página.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Caso você defina o &lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;b&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;EnableViewState&lt;/span&gt;&lt;/b&gt; &lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt; como falso a View State estara desabilitada independentemente do valor atribuido a propriedade &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;ViewStateMode. &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Porém se manter a propriedades &lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;b&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;EnableViewState &lt;/span&gt;&lt;/b&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;como verdadeira pode alterar a propriedade&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;ViewStateMode &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;para desabilitada. &lt;b&gt;Em resumo trabalhe com a propriedade &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;ViewStateMode.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;A lição tem uma tabela que ilustra como usar essas propriedades de forma mais simples:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Desabilitar a View State de uma página, porém habilitar de um controle especifico:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Page.Enable ViewState: True, Page.ViewState Mode: Disabled, &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Controle.Enable ViewState&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;/span&gt;&lt;b&gt;: True, Control&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;.ViewState Mode: Enabled&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Desabilitar a View State de uma página, e desabilitar de um controle especifico:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Page.Enable ViewState: True, Page.ViewState Mode: Disabled, &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Controle.Enable ViewState&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;/span&gt;&lt;b&gt;: False, Control&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;.ViewState Mode: Disabled&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Habilitar a View State de uma página, porém desabilitar de um controle especifico:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Page.Enable ViewState: True, Page.ViewState Mode: Enabled, &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Controle.Enable ViewState&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;/span&gt;&lt;b&gt;: False, Control&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;.ViewState Mode: Disabled&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Habilitar a View State de uma página, e de um controle especifico:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Page.Enable ViewState: True, Page.ViewState Mode: Enabled, &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Controle.Enable ViewState&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;/span&gt;&lt;b&gt;: True, Control&lt;/b&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;.ViewState Mode: Enabled&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Você pode desabilitar a View State de todo o projeto diretamente no web.config:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;lt;pages enableViewState="false"&amp;gt;&lt;br /&gt;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Para ler e escrever dados em uma View State é simples:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt; &lt;/i&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;this.ViewState.Add("MyData", "some data value"); //Escrevendo&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;string myData = (string)ViewState["MyData"]; //Lendo &lt;/i&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Hidden Fields&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Não tenho muito o que explicar sobre Hidden Fields, são parecidos com a View State, são campos que armazenam valores, ficam no código html da página porém não são exibidos ao usuário. Só é possível ve-los acessando o código fonte da página.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Cookies&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Outra prática comum pra quem já é desenvolvedor web. Cookies armazenam valores no browser do cliente e a cada requisição ao servidor os valores são enviados. A vantagem do uso de cookies sobre o uso de View State e Hidden Fields é que os cookies podem ser acessados de qualquer página desde que esteja no mesmo dominio em que foi criado.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;É possível ainda configurar seu tempo de vida e seu dominio. Escrever e ler dados de um cookie é simples:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;Response.Cookies.Add(New HttpCookie("userId", userId))&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;E para ler o valor:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;Request.Cookies("userId").Value&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Exemplo de código:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;i&gt;// Verifica se o cookie ja existe&lt;br /&gt;if (Request.Cookies["lastVisit"] != null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Encode the cookie in case the cookie contains client-side script&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = Server.HtmlEncode(Request.Cookies["lastVisit"].Value);&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label1.Text = "No value defined";&lt;br /&gt;// Define o valor do cookie&lt;br /&gt;Response.Cookies["lastVisit"].Value = DateTime.Now.ToString();&lt;br /&gt;Response.Cookies["lastVisit"].Expires = DateTime.Now.AddDays(1);&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;b&gt;Query Strings&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Outra prática comum em qualquer linguagem web. Query String é uso de parâmetros via URL. É formado de um parâmetro e seu valor correspondente. O primeiro parâmetro deve ser informado após o ponto de interrogação&lt;b&gt; ?&lt;/b&gt;&lt;i&gt;&amp;nbsp; &lt;/i&gt;os parâmetros seguintes com o&lt;b&gt; &amp;amp;&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Exemplo: http://www.quintelab.com.br/bruno.aspx?id=1&amp;amp;nome=bruno&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;No exemplo acima o primeiro parâmetro é o ID e o segundo é o NOME. Para ler esses parâmetros informados via QueryString basta:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;string id = Request.QueryString["id"].ToString();&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;string nome = Request.QueryString["nome"].ToString();&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;Alguns cuidados devem ser tomados, os navedores suportam 2083 caracteres. E fica fácil para qualquer usuário alterar os valores contidos na url. Este caso é muito usado por exemplo para o envio de url via e-mail que quando acessadas irã ser direcionadas já para um produto especifico.&lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span class="long_text" id="result_box" lang="pt"&gt;&lt;span class="hps" title="Clique para mostrar traduções alternativas"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-1382199373981406880?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/1382199373981406880/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/05/capitulo-3-handling-events-and-managing_16.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1382199373981406880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1382199373981406880'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/05/capitulo-3-handling-events-and-managing_16.html' title='Capítulo 3: Handling Events and Managing State Lição 2: Using Client-Side State Management'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-2048117000804639999</id><published>2011-05-01T16:51:00.000-07:00</published><updated>2011-05-01T16:51:47.050-07:00</updated><title type='text'>Capítulo 3: Handling Events and Managing State Lição 1: Understanding the ASP.NET Life Cycle and Handling Events</title><content type='html'>A primeira lição do capítulo 3 explica sobre o ciclo de vida da página e dos controles.&lt;br /&gt;&lt;br /&gt;De início a lição começa explicando sobre os eventos mais comuns que são manipulados no arquivo Global.asax:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Application_Start&lt;/b&gt;: É executado quando a aplicação é iniciado no servidor, muito comum quando é feito o acesso do primeiro usuário.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application_End&lt;/b&gt;: Quando a aplicação é finalizada. Pode ocorrer quando você para a aplicação pelo IIS ou quando é feito o servidor é reiniciado ou desligado.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application_Error&lt;/b&gt;: Como o nome já explica é executado quando ocorre um erro na aplicação.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application_LogRequest&lt;/b&gt;: É executado quando é feita uma requisição a aplicação, é usado para gravar informações especificas da requisição.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application_PostLogRequest&lt;/b&gt;: É executado quando é concluida uma requisição feita ao sistema.&lt;/li&gt;&lt;/ul&gt;Como uma sessão que é criado por usuário é possível criar uma sessão que é utilizada por toda aplicação. Basta substituir o &lt;b&gt;Session &lt;/b&gt;por &lt;b&gt;Application&lt;/b&gt;, é como uma sessão, mas ao invés de ser enxergada por um único usuário é enxergada por todos os usuários da aplicação.&lt;br /&gt;&lt;br /&gt;Em seguida na lição inicia a explicação do ciclo de vida da página, com certeza a maior dificuldade para programadores de aplicações windows que migram para o ambiente web, pois não estão acostumados com essa situação.&lt;br /&gt;&lt;br /&gt;Os eventos mais comuns e em ordem de execução de uma página são os seguintes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;PreInit&lt;/b&gt;: É o primeiro evento que o desenvolvedor pode manipular de uma página, é muito utilizado para definir valores de Master Page ou Temas em tempo de execução. &lt;b&gt;Caso não utilize Master Page&lt;/b&gt; é neste evento que você pode criar controles dinamicamente.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Init&lt;/b&gt;: Este evento é executado depois que todos controles foram instanciados, aqui você pode alterar os valores de iniciação dos controles. &lt;b&gt;Caso utilize Master Page&lt;/b&gt; é neste evento que deve adicionar os controles dinamicamente.&lt;/li&gt;&lt;li&gt;&lt;b&gt;InitComplete&lt;/b&gt;: Executado quando todas as inicializações estiverem completas.&lt;/li&gt;&lt;li&gt;&lt;b&gt;PreLoad&lt;/b&gt;: Executado antes da viewstate ser carregada e antes de ocorrer o processo de Postback. Necessário quando você precisa que os controles estejam iniciados e antes da viewstate ser restabelecida.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Load&lt;/b&gt;: A página está estável e iniciada. O Evento Load da página é chamada primeiramente, em seguida todos os eventos Load dos controles são executados hierarquicamente.&lt;/li&gt;&lt;li&gt;&lt;b&gt;LoadComplete&lt;/b&gt;: Neste evento todos os controles são carregados.&lt;/li&gt;&lt;li&gt;&lt;b&gt;PreRender&lt;/b&gt;: Este evento ainda permite que alterações finais aos controles. Ocorre depois dos eventos de postback ter ocorridos, e ainda a viewstate não foi salva, ainda permitindo alterações.&lt;/li&gt;&lt;li&gt;&lt;b&gt;SaveStateComplete&lt;/b&gt;: Neste evento a viewstate esta pronta. Qualquer alteração feita neste momento ou depois serão ignoradas. Este evento é util quando você precisa justamente que a viewstate esteja pronta.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Render&lt;/b&gt;: O Render é um método e não um evento, o asp.net chama este método para cada controle. Este método gera os códigos html e todos os outros necessários para exibição da página ao cliente.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Unload&lt;/b&gt;: Este evento é utilizado para liberação de recursos, até pode ser executado manualmente mas é um processo pouco comum.&lt;/li&gt;&lt;/ul&gt;Após explicar os principais eventos do ciclo de vida da página. A lição explica como criar um controle em tempo de execução. Código simples, única resalva é utilizar o evento Page_PreInit (quando não usar Master Page) ou Page_Init (quando usar Master Page):&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected void Page_PreInit(object sender, EventArgs e)&lt;br /&gt;{&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create instances of the controls&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label FeedbackLabel = new Label();&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox InputTextBox = new TextBox();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Button SubmitButton = new Button();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Assign the control properties&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FeedbackLabel.ID = "FeedbackLabel";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FeedbackLabel.Text = "Please type your name: ";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubmitButton.ID = "SubmitButton";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubmitButton.Text = "Submit";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InputTextBox.ID = "InputTextBox";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create event handlers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubmitButton.Click += new System.EventHandler(SubmitButton_Click);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add the controls to a Panel&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Panel1.Controls.Add(FeedbackLabel);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Panel1.Controls.Add(InputTextBox);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Panel1.Controls.Add(SubmitButton);&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected void SubmitButton_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create an instance of Button for the existing control&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Button SubmitButton = (Button)sender;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Update the text on the Button&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SubmitButton.Text = "Submit again!";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create the Label and TextBox controls&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Label FeedbackLabel = (Label)FindControl("FeedbackLabel");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TextBox InputTextBox = (TextBox)FindControl("InputTextBox");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Update the controls&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FeedbackLabel.Text = string.Format("Hi, {0}", InputTextBox.Text);&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;A lição explica como criar os eventos da página, no caso do vb você deve utilizar os dois ComboBox que estão na parte superior no arquivo de código. E no caso do c#, basta escrever o código, pois a propriedade &lt;b&gt;AutoEventWireup&lt;/b&gt; por padrão é true, não necessitando mais nenhuma associação.&lt;br /&gt;&lt;br /&gt;Outro processo comum utilizado pelos desenvolvedores e explicados é o PostBack automático. Alguns controles como o botão executam o postback automaticamente quando seu evento é acionado. Mas no caso do evento TextChanged do TextBox por exemplo ele não executa o PostBack automaticamente, é necessário alterar a propriedade &lt;b&gt;AutoPostBack&lt;/b&gt; para &lt;b&gt;true&lt;/b&gt;, caso não faça isso, o evento TextChanged só será executado quando outro controle executar o PostBack no formulário como por exemplo um clique do botão.&lt;br /&gt;&lt;br /&gt;Neste caso como ocorre: O usuário alterou o texto do textBox, nada acontece pois a propriedade esta como &lt;b&gt;false&lt;/b&gt;, em seguida o usuário clica no botão. O primeiro evento a ser executado é o TextChanged que estava aguardando um postback ocorrer, em seguida é executado o evento clique do botão.&lt;br /&gt;&lt;br /&gt;Se quiser que o TextChanged seja executado assim que o texto seja alterado altere a propriedade &lt;b&gt;AutoPostBack&lt;/b&gt; para true.&lt;br /&gt;&lt;br /&gt;Assim finaliza esta lição.&lt;br /&gt;&lt;br /&gt;Abraços...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-2048117000804639999?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/2048117000804639999/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/05/capitulo-3-handling-events-and-managing.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/2048117000804639999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/2048117000804639999'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/05/capitulo-3-handling-events-and-managing.html' title='Capítulo 3: Handling Events and Managing State Lição 1: Understanding the ASP.NET Life Cycle and Handling Events'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4444071801434647968</id><published>2011-04-12T20:51:00.000-07:00</published><updated>2011-04-12T20:53:16.495-07:00</updated><title type='text'>Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 3: Caching</title><content type='html'>Enfim a última lição do 2º Capítulo, &lt;b&gt;Caching&lt;/b&gt;!!&lt;br /&gt;&lt;br /&gt;Eu ja tive a oportunidade de trabalhar em projetos que usaram ambos tipos de cache explicados nesta lição. Confesso que achei mais fácil a prática do que a teoria, por isso devo escrever pouco sobre este assunto.&lt;br /&gt;&lt;br /&gt;O asp.net facilita o uso de Cache, sendo necessário poucas linhas de código para implentar. Existem dois tipos de cache no asp.net:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Application caching&lt;/b&gt;: representa uma coleção de dados armazenados em memória e que são removidos conforme configurados por tempo ou alguma dependência, ou em ultimo caso quando atingir o limite da memória.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Page output caching&lt;/b&gt;: acredito ser o mais simples e por isso o mais usado, o asp.net permite salvar uma página, ou até mesmo uma parte de uma página como um controle, para reduzir o tempo de resposta quando esta página for solicitada.&lt;/li&gt;&lt;/ul&gt;Quando se usa o &lt;b&gt;Application caching &lt;/b&gt;o cache é dividido por todos na aplicação, pode ser armazenado qualquer coisa, desde uma string, ou até mesmo uma classe populada, datatable e etc, cabe aqui um parênteses, tome cuidado com o tamanho do objeto que colocam em cache devido a memória.&lt;br /&gt;&lt;br /&gt;A codificação para trabalhar com o objeto cache é igual a trabalhar com uma sessão, a forma mais simples basta informar a chave e o valor. Ex:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Cache["Greeting"] = "Hello, cache!";&lt;br /&gt;if (Cache["Greeting"] != null)&lt;br /&gt;&amp;nbsp; Label1.Text = (string)Cache["Greeting"];&lt;br /&gt;else&lt;br /&gt;&amp;nbsp; Label1.Text = "Hello, world!";&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Existe também o método insert que possui mais parâmetros para você configurar seu objeto cache. O método Insert possui os seguintes parâmetros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;dependencies&lt;/b&gt;: é possível configurar uma dependência para manter seu objeto cache. Funciona como uma trigger. &lt;/li&gt;&lt;li&gt;&lt;b&gt;absoluteExpiration&lt;/b&gt;: É um DateTime que define o momento exato que o cache é expirado. Caso não queria definir esta data basta informar: &lt;b&gt;System.Web.Caching.Cache.NoAbsoluteExpiration&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;slidingExpiration&lt;/b&gt;: é um objeto TimeSpan, onde você informa depois do último acesso quanto tempo irá demorar para seu cache expirar. O contador é zerado toda vez que o cache é acessado. Se não quiser informar, basta: &lt;b&gt;System.Web.Caching.Cache.NoSlidingExpiration&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;priority&lt;/b&gt;: é o nível de prioridade do cache quando houver a necessidade de remoção de conteúdo, como em um possível estouro de memória, o &lt;b&gt;priority &lt;/b&gt;é um&lt;b&gt; &lt;/b&gt;enumeration e possui as seguintes opções: Low, BelowNormal, Normal (valor padrão), AboveNormal, High e NotRemovable.&lt;/li&gt;&lt;/ul&gt;Além dessas opções o objeto cache possui também o evento &lt;b&gt;onRemoveCallback&lt;/b&gt; que é disparado quando o objeto é removido do cache.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Page output caching&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Para adicionar uma página ao cache para diminuir a carga ao servidor&amp;nbsp; melhorar o desempenho do site perando o usuário, é possível colocar suas páginas no cache. Para isso basta adicionar a diretiva @OutputCache em sua página. Caso tenha interesse em armazenar somente uma parte da página, você deve separar esta parte em um Web User Controle e desta forma armazenar este controle no cache.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;A diretiva &lt;/span&gt;OutputCache possui os seguintes parâmetros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Duration&lt;/b&gt;: É o número de segundos do cache. É o único parâmetro obrigatório;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Location&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;CacheProfile&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;NoStore&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Shared&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;VaryByParam&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;VaryByControl&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;SqlDependency&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;VaryByCustom&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;VaryByHeader&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Por enquanto é isso!!&lt;br /&gt;&lt;br /&gt;Abraços...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4444071801434647968?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4444071801434647968/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/04/capitulo-2-using-master-pages-themes_12.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4444071801434647968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4444071801434647968'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/04/capitulo-2-using-master-pages-themes_12.html' title='Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 3: Caching'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4872355064740324395</id><published>2011-04-05T20:37:00.000-07:00</published><updated>2011-04-05T20:37:19.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='Temas'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Theme'/><category scheme='http://www.blogger.com/atom/ns#' term='skin'/><title type='text'>Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 2: Using Themes</title><content type='html'>&amp;nbsp;Esta lição do capítulo fala especificamente como aplicar temas em suas aplicações web. Fala da possibilidade do uso de CSS também, mas não aprofunda no assunto.&lt;br /&gt;&lt;br /&gt;Como já vistos em lições anterires o uso de Temas são para facilitar a manutenção do visual da aplicação, podendo alterar em um único local, e principalmente tornar dinâmico o visual de sua aplicação.&lt;br /&gt;&lt;br /&gt;Para começar a criar seu Tema, é bem simples, clique com o botão direito no &lt;b&gt;Solution Explorer&lt;/b&gt;, clique em &lt;b&gt;Add Asp.Net Folder&lt;/b&gt;, em seguinda clique em &lt;b&gt;Theme&lt;/b&gt;. Dentro desta pasta &lt;b&gt;Theme&lt;/b&gt; você irá criar seus temas personalizados, cada um dentro da respectiva pasta. Exemplo, dentro da pasta &lt;b&gt;Theme&lt;/b&gt; crie a pasta &lt;b&gt;Azul&lt;/b&gt; e outra chamada &lt;b&gt;Vermelho&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;A seguir basta adicionar dentro de cada pasta, arquivos skins, css e imagens. O ideal é criar um tema por completo e depois sair copiando e colando nos demais temas, só editando o que for especifico de cada tema.&lt;br /&gt;&lt;br /&gt;Para aplicar o tema a sua página web ou para toda aplicação, existem dois atributos que podem ser usados, &lt;b&gt;Theme &lt;/b&gt;e &lt;b&gt;StyleSheetTheme&lt;/b&gt;. Você pode definir essas propriedades diretamente no web.config ou nas páginas que achar necessário:&lt;br /&gt;&lt;br /&gt;&amp;lt;pages Theme=”themeName”&amp;gt; ou &amp;lt;pages StyleSheetTheme=”themeName”&amp;gt;&lt;br /&gt;&lt;br /&gt;Qual a diferença entre ambos?&lt;br /&gt;&lt;br /&gt;Quando se o StyleSheetTheme, essas configurações são aplicadas aos controles antes de aplicar possíveis configurações definidas dirementa no controle, ou seja, por ordem de hierarquia irá prevalecer configurações que estiverem diretamente no controle, caso não tenha nenhuma é aplicado as configuraçoes do &lt;b&gt;Tema&lt;/b&gt;.&lt;br /&gt;Como é de se imaginar o uso do atributo Theme é o contrário ele sempre irá prevalecer, substituindo qualquer propriedade definida diremante no controle.&lt;br /&gt;&lt;br /&gt;Para criar um &lt;b&gt;Arquivo Skin&lt;/b&gt; você deve na pasta do seu tema clicar com o botão direito, então, Add New Item. Em seguinda, selecione &lt;b&gt;Skin File&lt;/b&gt; e basta definir o nome do seu skin. Existem dois tipos de skin. &lt;b&gt;Default skins&lt;/b&gt; são aplicados a todos os controles daquele tipo, ou seja, se você criar um skin para botões, em todos os botões serão aplicadas as configurações. E &lt;b&gt;Named skins&lt;/b&gt; que na verdade é o skin mas com um ID, e para um botão receber essas configurações deve obrigatoriamente informar esta ID, caso contrário não receberá as configurações.&lt;br /&gt;&lt;br /&gt;Exemplo de &lt;b&gt;Default skins:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:Button runat="server" BackColor="Red" ForeColor="White" Font-Name="Arial" Font-Size="9px" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Exemplo de&amp;nbsp;&lt;b&gt;Named skins&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;asp:Label runat="server" SkinId="Title" Font-Size="18px" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Além de arquivos skin, no seu Tema é possível ainda adicionar imagens e arquivos de folhas de estilos, o famoso CSS. Tudo bem simples e sem segredo.&lt;br /&gt;&lt;br /&gt;Como ja explicado para adicionar um &lt;b&gt;Tema&lt;/b&gt; basta adicionar os atributos Theme ou StyleSheetTheme no web.config ou em sua página.&lt;br /&gt;&lt;br /&gt;É possível também definir uma página ou controle que você não quer que seja aplicado o &lt;b&gt;Tema&lt;/b&gt;, basta alterar a propriedade &lt;b&gt;EnableTheming&lt;/b&gt; para &lt;b&gt;false&lt;/b&gt;: EnableTheming="false".&lt;br /&gt;&lt;br /&gt;Essa propriedade pode ser aplicada para toda a página ou para controles especificos.&lt;br /&gt;&lt;br /&gt;Para aplicar um tema dinamicamente, ou seja, em tempo de execução, você deve fazer isso no evento &lt;b&gt;Page_PreInit&lt;/b&gt; e definir a propriedade &lt;b&gt;Page.Theme&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Protected void Page_PreInit(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; switch (Session["theme"])&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Blue":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.Theme = "BlueTheme";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case "Pink":&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.Theme = "PinkTheme";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.Theme = "GreenTheme";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;E assim finaliza mais uma lição.&lt;br /&gt;&lt;br /&gt;Abraços...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4872355064740324395?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4872355064740324395/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/04/capitulo-2-using-master-pages-themes.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4872355064740324395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4872355064740324395'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/04/capitulo-2-using-master-pages-themes.html' title='Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 2: Using Themes'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4782331966016629372</id><published>2011-03-31T20:43:00.000-07:00</published><updated>2011-03-31T20:43:37.300-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='certificação asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='Master Page'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 1: Using Master Pages</title><content type='html'>O capítulo 2 começa a falar dos recursos interessantes do .net.&lt;br /&gt;&lt;br /&gt;A primeira lição explica sobre o uso de Master Pages, que a primeiro momento é bem simples, mas a parte explicando sobre as propriedades é interessante e com certeza usuários com pouca experiência não devem saber como usar este recurso. Vamos la!!&lt;br /&gt;&lt;br /&gt;De inicio para que serve a Master Page? Pra quem ja programo em plataforma windows ou pelo menos ouviu algo, sabe que é possível ter um formulário base, e que todos outros criados herdam este formulário. Normalmente este formulário base possui o menu, uma toolbar e etc. A Master Page segue a mesma idéia para projetos web. Cria-se um layout padrão, onde o mais comum é ter o menu, a logo da empresa e um rodapé, e todas as páginas que usarem esta Master Page, terão este mesmo layout.&lt;br /&gt;&lt;br /&gt;A principal idéia é:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;centralizar funcionalidades comuns;&lt;/li&gt;&lt;li&gt;quando necessário alterar algo, será necessário alterar em um único local;&lt;/li&gt;&lt;li&gt;desenvolver controles que serão aplicados facilmente em todas as páginas, como um menu;&lt;/li&gt;&lt;li&gt; e ainda sim, permitir que as páginas que "herdam" esta Master Page possam customizar conforme necessário.&lt;/li&gt;&lt;/ul&gt;Os arquivos de Master Page são arquivos parecidos com WebForm, mas possuem a extensão &lt;b&gt;.master&lt;/b&gt; e uma diretiva na primeira linha do documento &lt;b&gt;&amp;lt;%@ Master&lt;/b&gt; no local da diretiva &lt;b&gt;&amp;lt;%@ Page!!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Como fica o resultado para o usuário? O usuário irá acessar a url do formulário normalmente, e quando esta página for renderizada para o usuário será lida a diretiva &lt;b&gt;MasterPageFile &lt;/b&gt;que especifica qual a Master Page que a página esta usando, então o conteúdo que estiver na página dentro do controle &lt;b&gt;Content&lt;/b&gt; será renderizado junto com a Master Page como uma única página simples para o usuário.&lt;br /&gt;&lt;br /&gt;Toda Master Page deve ter o controle &lt;b&gt;ContentPlaceHolder&lt;/b&gt; é no "espaço" deste controle no código html que o código das página serão "injetados". Exemplo: irei colocar um &lt;b&gt;ContentPlaceHolder &lt;/b&gt;dentro do head e do Body da minha Master Page:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;head runat="server"&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Site do quintelab&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="HeadContent" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;/asp:ContentPlaceHolder&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form runat="server"&amp;gt;&lt;br /&gt;&amp;lt;div class="title"&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;&lt;br /&gt;Quintelab&lt;br /&gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;div class="principal"&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="MainContent" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="footer"&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Repare os dois objetos ContentPlaceHolderé no local deles que o código das demais páginas serão renderizados. Exemplo de uma página que fez referência a esta Master Page:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;%@ Page Language="c#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Teste.aspx.cs" Inherits="Teste" %&amp;gt;&lt;br /&gt;&amp;lt;asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"&amp;gt;&lt;br /&gt;&amp;lt;/asp:Content&amp;gt;&lt;br /&gt;&amp;lt;asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"&amp;gt;&lt;br /&gt;Aqui meu conteúdo especifico&lt;br /&gt;&amp;lt;/asp:Content&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Tudo que estiver dentro dos &lt;b&gt;Content &lt;/b&gt;serão renderizados no local dos &lt;b&gt;ContentPlaceHolder.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Vamos&lt;b&gt; &lt;/b&gt;aos recursos!! É possível definir no web.config da aplicação ou de uma pasta qual é a Master Page principal, basta:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&amp;lt;pages masterPageFile="MinhaMasterPage.Master" /&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Claro será necessário criar nas paginas os controles Contents correspondentes a Master.Page, caso contrário nada irá acontecer.&lt;br /&gt;&lt;br /&gt;A parte mais interessante desta lição é como utilizar e customizar Propriedades, Métodos e Controles da Master Page pelas páginas. Um exemplo, um título, você pode colocar uma label em sua Master Page e acessar seu conteúdo através das páginas.&lt;br /&gt;&lt;br /&gt;Para isso é necessário ter uma propriedade pública na Master Page, adicionar a declaração &lt;b&gt;@ MasterType&lt;/b&gt; nas páginas aspx, e para acessar o valor da propriedade a sintaxe é Master.&amp;lt;NomePropriedade&amp;gt;.&lt;br /&gt;&lt;br /&gt;Não tem muito segredo, exemplo:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1º Criando a propriedade pública na Master Page:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;public String SharedInfo&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return (String)Session["SharedInfo"]; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { Session["SharedInfo"] = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2º Na página aspx:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ Page Language="c#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %&amp;gt;&lt;br /&gt;&amp;lt;%@ MasterType VirtualPath="~/Site.master" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3º Acessar o valor da propriedade&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;infoLabel.Text = Master.SharedInfo;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Outro recurso interessante, e com certeza irá usar, é o que a lição chama de &lt;b&gt;Nested Master Pages&lt;/b&gt;. Que são Master Pages herdadas de outra Master Page. Por exemplo, você pode criar a Master Page &lt;b&gt;Principal.Master&lt;/b&gt; onde nela possui a logo da empresa e um rodape. E criar mais duas Master Pages, uma chamada &lt;b&gt;Consulta.Master&lt;/b&gt; que herda a Principal e tem particularidades de uma tela de consulta e a &lt;b&gt;Cadastro.Master&lt;/b&gt; que também herda da Principal mas possui particularidades de uma tela de cadastro.&lt;br /&gt;&lt;br /&gt;Por último e não menos importante, como trocar a Master Page dinamicamente. Mesmo que esta opção exista, você deve na sua página aspx definir na declaração qual é a Master Page que a página utiliza, e claro ambas as Master Page devem ter os mesmos &lt;b&gt;ContentPlaceHolder e as mesmas propriedades.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Para fazer a troca dinamicamente, é necessário utilizar o evento &lt;b&gt;Page_PreInit&lt;/b&gt; e definir a propriedade &lt;b&gt;MasterPageFile&lt;/b&gt;. Exemplo:&lt;br /&gt;&lt;br /&gt;void Page_PreInit(Object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MasterPageFile = "~/MinhaMasterDinamica.master";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;E desta forma se encerra a 1º Lição do Capítulo 2. Muito útil com certeza.&lt;br /&gt;&lt;br /&gt;Abraços!!&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4782331966016629372?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4782331966016629372/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/03/capitulo-2-using-master-pages-themes.html#comment-form' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4782331966016629372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4782331966016629372'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/03/capitulo-2-using-master-pages-themes.html' title='Capítulo 2: Using Master Pages, Themes, and Caching!!! Lição 1: Using Master Pages'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-8467460007772890893</id><published>2011-03-22T19:46:00.000-07:00</published><updated>2011-03-22T20:02:56.583-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web.config'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net 4'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>1º Capítulo, 3ª Lição - Working with Web Configuration Files</title><content type='html'>Enfim chegei a 3ª e última lição do 1º Capítulo. Esta lição fala sobre arquivos de configuração de aplicações usando o .net 4.&lt;br /&gt;&lt;br /&gt;Particularmente achei muito simples e útil para o dia a dia, a lição fala exclusivamente sobre a hierarquia dos arquivos de configuração, os famosos &lt;span style="font-weight: bold;"&gt;.config&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O mais conhecido de todos os desenvolvedores com certeza é o &lt;span style="font-weight: bold;"&gt;web.config&lt;/span&gt; que é criado automaticamente pelo visual studio quando criamos um projeto web. Mas não temos só esse arquivo de configuração.&lt;br /&gt;&lt;br /&gt;O arquivo de configuração &lt;span style="font-weight: bold;"&gt;Master (Pai de todos)&lt;/span&gt; é o &lt;span style="font-weight: bold;"&gt;machine.config&lt;/span&gt; que pode ser encontrado no seguinte caminho (%System Root%\Microsoft.NET\Framework\&lt;br /&gt;&lt;versionnumber&gt;\CONFIG\Machine.config). As definições de configuração que estão no machine.config serão válidas e aplicadas para qualquer aplicação que use o .net neste servidor, seja ela web, windows, class library ou console application.&lt;br /&gt;&lt;br /&gt;Seguindo a hierarquia abaixo do machine.config tem o &lt;span style="font-weight: bold;"&gt;web.config root&lt;/span&gt;. Este web.config contém definições que são aplicadas para todos websites do servidor. Se por acaso ficou em dúvida sobre a definição de web site, quando o IIS é instalado ele cria um único WebSite que é o WebSite Padrão, ou seja, esse &lt;span style="font-weight: bold;"&gt;web.config root&lt;/span&gt; irá conter definições para todos os WebSites que estiverem neste servidor. Este arquivo pode ser encontrado em: (%SystemRoot%\Microsoft.NET\Framework\&lt;versionnumber&gt;\CONFIG\Web.config)&lt;br /&gt;&lt;br /&gt;Após o web.config root, temos o &lt;span style="font-weight: bold;"&gt;web.config do website&lt;/span&gt; que é especifico de cada website, como eu disse no parágrafo acima, podemos ter mais de um hospedado, então tendo um web.config para cada um podemos especificar algumas definições.&lt;br /&gt;&lt;br /&gt;Enfim chegamos ao tradicional &lt;span style="font-weight: bold;"&gt;web.config da aplicação&lt;/span&gt; que é o web.config que você tem ae no seu visual studio e que contém as definições que mais alteramos com por exemplo a conexão com banco de dados.&lt;br /&gt;&lt;br /&gt;E é possível ainda criar um web.config para cada pasta de sua aplicação, isso é mais comum em grandes aplicações, onde é necessário definir regras e configurações especificas em algumas pastas.&lt;br /&gt;&lt;br /&gt;Basicamente o que a lição mostra é isso. Como tudo isso funciona? Da mesma forma que escrevi, hierarquicamente. O .net começa aplicando as definições do machine.config e vem passando por cada arquivo .config aplicando o que for necessário.&lt;br /&gt;&lt;br /&gt;Assim finalização o 1º Capítulo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-8467460007772890893?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/8467460007772890893/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/03/1-capitulo-3-licao-working-with-web.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/8467460007772890893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/8467460007772890893'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/03/1-capitulo-3-licao-working-with-web.html' title='1º Capítulo, 3ª Lição - Working with Web Configuration Files'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-3675968643031338781</id><published>2011-03-20T11:55:00.000-07:00</published><updated>2011-03-20T12:22:16.896-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='capítulo 1'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='lição 2'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>1º Capítulo, 2ª Lição - Creating a Website and Adding New Webpages</title><content type='html'>A segunda lição do primeiro capítulo continua simples como a primeira lição para quem já trabalha com o Visual Studio. Esta lição mostra como criar web sites/web applications no visual studio e as opções que você escolher neste momento, e também como adicionar uma nova página aspx ao seu projeto.&lt;br /&gt;&lt;br /&gt;Na criação de um projeto web o visual studio te da algumas opções como:&lt;br /&gt;&lt;br /&gt;Qual linguagem usar, normalmente:&lt;ul&gt;&lt;li&gt;Visual Basic&lt;/li&gt;&lt;li&gt;Visual C#&lt;/li&gt;&lt;/ul&gt;E a opção de conexão do visual studio com o projeto que é o grande foco da lição:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;File system&lt;/span&gt;: Como o nome mostra, sistema de arquivos simples, você pode armazenar os arquivos tanto localmente, como em um servidor remoto. A lição explica o uso do recurso do WebDAV caso queria usar um servidor remoto. Até onde eu vi pouco usado pela comunidade, com certeza o file system local é o mais comum.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;FTP&lt;/span&gt;: Simples como o nome mostra é quando você trabalha conectado em um ftp que esta em um servidor remoto. Esta opção não tem muito segredo e é a menos explicada na lição. Cuidado com a segurança pois os arquivos de código estarão expostos no seu servidor. O IIS bloqueia o acesso via browser. Mas lembre-se que o FTP esta exposto.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;HTTP:&lt;/span&gt; Para trabalhar com esta forma de conexão, você precisará do &lt;span style="font-weight: bold;"&gt;WebDAV Publishing&lt;/span&gt;, caso seja Windows Server 2008 R2, ou se for uma versão inferior poderá usar o &lt;span style="font-weight: bold;"&gt;Microsoft Front Page Server Extensions 2002&lt;/span&gt;. A lição explica como instalar os recursos do IIS necessários para trabalhar desta forma. E após instalados basta criar um website ou um diretório virtual para sua aplicação.&lt;/li&gt;&lt;/ul&gt;Depois de mostrar as configurações disponíveis no Visual Studio, a lição lista e explica as pastas e os arquivos criados quando você usa o Template de Projetos Web do Visual Studio, como por exemplo, as pastas &lt;span style="font-weight: bold;"&gt;Account&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;App_Data&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;Scripts&lt;/span&gt;, e arquivos como &lt;span style="font-weight: bold;"&gt;Default.aspx&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Global.asax&lt;/span&gt; e outros que são criados automaticamente.&lt;br /&gt;&lt;br /&gt;Esta lição também fala sobre as duas opções de criar uma página aspx:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Single-File: É quando o código de programação, seja visual basic ou visual c# ficam no mesmo arquivo do código html.&lt;/li&gt;&lt;li&gt;Code-behind: Com certeza a forma mais usada e recomendada, quando fica separado em arquivos distintos o código de programação que roda do lado servidor, e o lado de código html e outros scripts que rodam do lado do cliente.&lt;/li&gt;&lt;/ul&gt;Outro ponto brevemente falado é sobre a forma de compilação dos projetos.&lt;br /&gt;&lt;br /&gt;Na primeira o desenvolvedor pode simplesmente copiar os arquivos para o servidor, onde a principal vantagem é não ter que compilar toda a aplicação quando quiser fazer a instalação, e quando ouver mudanças subir um único arquivo será possível. E a grande desvantagem é que a primeira vez que a página for acessada ela terá que ser compilada, gerando um tempo de espera para o usuário, &lt;span style="font-weight: bold;"&gt;o que não é nada bom&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;E a outra opção, acredito ser a mais usada e correta é compilar sua aplicação. A desvantagem é justamente a vantagem do item anterior, toda vez que ocorrer uma mudança toda a aplicação deve ser compilada. E a vantagem é que as páginas carregarão mais rápido para o usuário, além de não ter que subir código fonte para o servidor de produção, o código fica compilado em dll, se tornando assim mais seguro.&lt;br /&gt;&lt;br /&gt;Por enquanto é isso!!&lt;br /&gt;&lt;br /&gt;Abraços...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-3675968643031338781?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/3675968643031338781/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/03/1-capitulo-2-licao-creating-website-and.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/3675968643031338781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/3675968643031338781'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/03/1-capitulo-2-licao-creating-website-and.html' title='1º Capítulo, 2ª Lição - Creating a Website and Adding New Webpages'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4824238463715346323</id><published>2011-03-16T19:01:00.000-07:00</published><updated>2011-03-16T19:14:47.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asp.net'/><category scheme='http://www.blogger.com/atom/ns#' term='certificação'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Rumo a certificação, 1º capítulo</title><content type='html'>Mais uma vez vou me arriscar a começar os estudos para a certificação em asp.net da Microsoft. E conforme for lendo, vou ir tentando escrever aqui sobre os capítulos do livro:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Microsoft Press MCTS Self Paced Training Kit Exam 70-515&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O primeiro capitulo é só uma introdução ao mundo web, como o título diz:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Introducing ASP.NET 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A primeira lição é uma explicação sobre a forma de comunicação na web, qualquer programador web hoje sabe o que esta escrito neste lição, são protocolos usados entre a comunicação cliente - servidor, código de retornos do servidor e etc...&lt;br /&gt;&lt;br /&gt;Esta lição se foca principalmente em dois pontos:&lt;br /&gt;&lt;br /&gt;1º Ponto, mostrar e explicar os principais códigos de retorno do servidor ao navegador, o exemplo mais clássico e conhecido é o código 404 de Not Found, na lição é possível encontrar uma tabela com esse códigos e suas devidas descrição.&lt;br /&gt;&lt;br /&gt;O 2º Ponto, e acredito o mais importante é a diferente entre a forma de enviar requisições ao servidor, usando Get ou Post.&lt;br /&gt;&lt;br /&gt;Como explicado na lição e acredito que muitos saibam quando usamos o &lt;span style="font-weight: bold;"&gt;Get&lt;/span&gt; as informações são passadas pela url via querystring. Isso se torna uma vantagem para facilitar buscas e criar links personalidados para sua aplicação, mas pode e com certeza será um transtorno para evitar que informações sejam modificadas através da URL, podendo até mesmo comprometer sua aplicação.&lt;br /&gt;&lt;br /&gt;Sem dúvida a melhor forma de enviar requisições ao servidor é usando o comando &lt;span style="font-weight: bold;"&gt;POST&lt;/span&gt; onde os dados são enviados pelo corpo da mensagem, de forma transparante para o usuário.&lt;br /&gt;&lt;br /&gt;No último parágrafo desta lição cita-se o IsPostBack, até o momento irrelevante, mas acredito que mais pra frente irei ler sobre o ciclo de vida de um formulário e principalmente de uma página aspx.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4824238463715346323?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4824238463715346323/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2011/03/rumo-certificacao-1-capitulo.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4824238463715346323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4824238463715346323'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2011/03/rumo-certificacao-1-capitulo.html' title='Rumo a certificação, 1º capítulo'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-1011970807174997288</id><published>2010-07-10T16:23:00.001-07:00</published><updated>2010-07-10T16:24:09.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET C# VB.NET JQuery quintelab ajax json'/><title type='text'>Integração entre o JQuery e o C#</title><content type='html'>Confiram o artigo: &lt;a href="http://www.quintelab.com.br/Artigos/Json.asp"&gt;http://www.quintelab.com.br/Artigos/Json.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-1011970807174997288?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/1011970807174997288/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2010/07/integracao-entre-o-jquery-e-o-c.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1011970807174997288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1011970807174997288'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2010/07/integracao-entre-o-jquery-e-o-c.html' title='Integração entre o JQuery e o C#'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-2924241908392380105</id><published>2010-06-19T17:44:00.000-07:00</published><updated>2010-06-19T17:46:07.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='#microsoft #spammer #hotmail'/><title type='text'>Microsoft processa spammer que "enganou" filtros do Hotmail</title><content type='html'>A Microsoft está processando um spammer nos Estados Unidos que conseguiu  burlar dois filtros de mensagens do Hotmail, que classificam e-mails  recebidos pelos usuários. As informações são do site Ars Techica.&lt;br /&gt;&lt;br /&gt;Boris Mizhen, dono das empresas Media Network, New Age Opt-In e  Permission, criou milhões de contas no Hotmail com o intuito de usá-las  para enviar 200 mil mensagens de spam como e-mails legítimos. As  mensagens indevidas eram movidas da pasta de lixo eletrônico para as  caixas de entrada das contas falsas, o que conseguiu enganar os filtros  antispam da Microsoft.&lt;br /&gt;&lt;br /&gt;Ainda, um advogado de Mizhen entrou em contato com a Microsoft pedindo  que a empresa parasse de tratar as mensagens como spam. O artifício  permitiu que uma “quantidade vasta” de mensagens indevidas fosse enviada  a usuários do Hotmail, violando várias leis federais americanas.&lt;br /&gt;&lt;br /&gt;Não é a primeira vez que o spammer é processado pela Microsoft. Em 2003,  também acusado de enviar spams aos usuários do Hotmail, Mizhen  concordou em pagar US$ 2 milhões à Microsoft e parar de enviar as  mensagens.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://tecnologia.uol.com.br/seguranca/ultimas-noticias/2010/06/18/microsoft-processa-spammer-que-enganou-filtros-do-hotmail.jhtm"&gt;UOL Tecnologia&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-2924241908392380105?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/2924241908392380105/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2010/06/microsoft-processa-spammer-que-enganou.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/2924241908392380105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/2924241908392380105'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2010/06/microsoft-processa-spammer-que-enganou.html' title='Microsoft processa spammer que &quot;enganou&quot; filtros do Hotmail'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-5101569324863790589</id><published>2010-02-27T16:36:00.000-08:00</published><updated>2010-02-27T16:37:40.237-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Privacidade'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Segurança'/><title type='text'>'Guia de espionagem' da Microsoft: o que você precisa saber</title><content type='html'>Documento vazado pelo site Cryptome orienta agentes da lei sobre as informações de usuário que a Microsoft guarda, e como obtê-las.&lt;br /&gt;&lt;br /&gt;Desde 1996, o site Cryptome tem divulgado documentos que governos e empresas gostariam que permanecessem secretos. Agora o Cryptome estende seu olhar à web com a liberação do Microsoft Online Services Global Criminal Compliance Handbook, um “guia de espionagem” para agentes da lei e que traz detalhes sobre os dados que a Microsoft obtém, guarda e pode fornecer.&lt;br /&gt;&lt;br /&gt;Como a maioria de nós é usuária da Microsoft, há algumas informações que você precisa saber antes de comprar pontos do Xbox Live, se conectar ao Office Live, ou enviar um e-mail no Hotmail.&lt;br /&gt;&lt;br /&gt;O que é o “guia de espionagem”?&lt;br /&gt;O Global Criminal Compliance Handbook é um documento explicativo semiabrangente concebido para investigadores, policiais e outros agentes da lei que querem acessar as informações armazenadas pela Microsoft. Ele também oferece amostras de texto para uso em intimações e diagramas que ajudam a entender os registros dos servidores.&lt;br /&gt;&lt;br /&gt;O termo “semiabrangente” se justifica aqui porque, com apenas 22 páginas, ele não explora os bits e bytes dos sistemas da Microsoft; é mais como um guia de caça à informação, feito para leigos.&lt;br /&gt;&lt;br /&gt;Quais serviços da Microsoft são abordados?&lt;br /&gt;Todos. A Microsoft mantém as informações dos usuários relacionadas aos serviços online. Os dados abrangem de e-mails antigos a números de cartão de crédito. A informação é mantida por um certo período de tempo – às vezes, para sempre.&lt;br /&gt;&lt;br /&gt;Os sites mencionados são:&lt;br /&gt;&lt;br /&gt;Windows Live&lt;br /&gt;Windows Live ID&lt;br /&gt;Microsoft Office Live&lt;br /&gt;Xbox Live&lt;br /&gt;MSN&lt;br /&gt;Windows Live Spaces&lt;br /&gt;Windows Live Messenger&lt;br /&gt;Hotmail&lt;br /&gt;MSN Groups&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://idgnow.uol.com.br/seguranca/2010/02/26/guia-de-espionagem-da-microsoft-o-que-voce-precisa-saber/"&gt;idgnow&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-5101569324863790589?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/5101569324863790589/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2010/02/guia-de-espionagem-da-microsoft-o-que.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/5101569324863790589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/5101569324863790589'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2010/02/guia-de-espionagem-da-microsoft-o-que.html' title='&apos;Guia de espionagem&apos; da Microsoft: o que você precisa saber'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-7156056281231164248</id><published>2010-02-27T16:27:00.000-08:00</published><updated>2010-02-27T16:34:33.222-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mídia Social'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google estreia opção 'Nearby' em sua ferramenta de busca na web</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Com o recurso, lojas, bancos, restaurantes e outros estabelecimentos próximos do internauta aparecem no topo da lista de resultados.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O Google anunciou nesta sexta-feira (26/2), em seu blog, que colocou no ar uma nova opção de filtro de busca, chamado Nearby.&lt;br /&gt;&lt;br /&gt;Com a opção - disponível inicialmente apenas para a interface em inglês, mas que pode ser usada para buscas em português -, o internauta pode refinar os resultados obtidos, filtrando-os por localização (cidade e estado).&lt;br /&gt;&lt;br /&gt;A opção Nearby surge na coluna à esquerda da tela, como alternativa a All Results, e fica disponível depois que se abre o painel Search Options. É possivel definir uma localização padrão e, depois dela, escolher o grau de aproximação - cidade, região ou Estado.&lt;br /&gt;&lt;br /&gt;Para experimentar o filtro Nearby, basta mudar a interface de busca do Google, de português para inglês, clicando no link Configurações da Pesquisa, no canto superior direito da tela.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://idgnow.uol.com.br/internet/2010/02/26/google-estreia-opcao-nearby-em-sua-ferramenta-de-busca-na-web/"&gt;idgnow&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-7156056281231164248?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/7156056281231164248/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2010/02/google-estreia-opcao-nearby-em-sua.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/7156056281231164248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/7156056281231164248'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2010/02/google-estreia-opcao-nearby-em-sua.html' title='Google estreia opção &apos;Nearby&apos; em sua ferramenta de busca na web'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-1719882144189712850</id><published>2010-01-10T15:11:00.000-08:00</published><updated>2010-01-10T15:14:08.348-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seven'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='GodMode'/><category scheme='http://www.blogger.com/atom/ns#' term='7'/><title type='text'>Seja "Deus" no Windows 7: saiba o que é o GodMode</title><content type='html'>Nesta semana, pipocou na &lt;span style="font-weight: bold;"&gt;internet&lt;/span&gt; uma função escondida pela Microsoft: um "God Mode" (modo Deus) para o &lt;span style="font-weight: bold;"&gt;Windows&lt;/span&gt;. Apesar de sugerir um impacto muito maior, quando ativo o que este modo faz é concentrar, em um local, todos os painéis de configuração do Windows 7.&lt;br /&gt;&lt;br /&gt;Quando criado, o "God Mode" traz uma lista corrida com 278 opções organizadas alfabeticamente e agrupadas em seções. Um duplo clique sobre alguma e é disparada a janela de configuração referente ao item.&lt;br /&gt;&lt;br /&gt;Ativar o "modo Deus" é simples: abra uma janela do Windows Explorer e clique com o botão direito do mouse. Escolha a opção Nova Pasta e, na hora de nomeá-la, cole o seguinte texto:&lt;br /&gt;GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}&lt;br /&gt;&lt;br /&gt;Aperte Enter. O ícone será modificado para o mesmo utilizado pelo Painel de Controle e, quando aberto, revelará todas as opções.&lt;br /&gt;&lt;br /&gt;É verdade que o modo é um paraíso para qualquer técnico, que não precisará mais recorrer a diferentes menus do Painel de Controle para realizar configurações simples. Todavia, por apresentar todas as opções, inclusive de ferramentas administrativas para formatação e particionamento de disco, pode se tornar um pesadelo para usuários de pouca prática e fuçadores.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://tecnologia.terra.com.br/interna/0,,OI4194826-EI4801,00-Seja+Deus+no+Windows+saiba+o+que+e+o+GodMode.html"&gt;Terra&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Obs.: Eu testei e funciona mesmo!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-1719882144189712850?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/1719882144189712850/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2010/01/seja-deus-no-windows-7-saiba-o-que-e-o.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1719882144189712850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1719882144189712850'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2010/01/seja-deus-no-windows-7-saiba-o-que-e-o.html' title='Seja &quot;Deus&quot; no Windows 7: saiba o que é o GodMode'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4030538827226901668</id><published>2009-12-22T11:33:00.000-08:00</published><updated>2009-12-22T11:38:11.036-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firefox Beta 3.6'/><title type='text'>Mozilla libera mais um Beta do Firefox 3.6</title><content type='html'>&lt;h2 class="hdois-desc-noticia"  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Versão 5 adota API do HTML5 e acelera a carga de páginas ao executar scripts de forma assíncrona.&lt;/span&gt;&lt;/h2&gt;                                                                                                                       &lt;p  style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;A comunidade de desenvolvimento Mozilla anunciou nesta sexta-feira (18/12) que já está disponível a mais recente versão beta do navegador Firefox 3.6.&lt;br /&gt;&lt;br /&gt;Alem da cota usual de correções de falhas, o Firefox 3.6 Beta 5 traz vários recursos novos, além de melhorias de desempenho. Esta versão permite que os usuários mudem a face (skin) do programa para um novo tema. O Beta 5 também pode executar scripts de forma assíncrona, o que deverá acelerar os tempos de carga de páginas com múltiplos scripts.&lt;br /&gt;&lt;br /&gt;A nova versão também deve agradar a desenvolvedores de aplicativos web de última geração, já que ela se alinha a diversos novos padrões. O Firefox 3.6 Beta 5 opera com uma interface de programação de aplicativos baseada no HTML5, que fornece um modo padrão para que aplicativos web peçam ao usuário a seleção de arquivos armazenados no PC.&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:85%;"&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Por meio de uma especificação CSS (Cascading Style Sheets), ela permite a sobreposição de múltiplos backgrounds. Além disso, a versão trabalha com o formato Web Open Font, um formato de arquivo comprimido para fontes.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;O Firefox 3.6, de codinome Namoroka, usa o motor de layout Gecko 1.9.2. Segundo a Mozilla, mais de 70% dos add-ons do Firefox produzidos por terceiros foram atualizados para funcionar com o 3.6.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Apesar de o Firefox 3.5.6 ser a versão atualmente recomendada para uso diário, quem tiver interesse em testar o beta poderá baixá-lo do site da Mozilla. Aqueles que já têm o beta do Firefox 3.6 deverão ter a atualização baixada automaticamente.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Fonte: &lt;a href="http://idgnow.uol.com.br/internet/2009/12/18/mozilla-libera-mais-um-beta-do-firefox-3.6/"&gt;http://idgnow.uol.com.br/internet/2009/12/18/mozilla-libera-mais-um-beta-do-firefox-3.6/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4030538827226901668?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4030538827226901668/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/12/mozilla-libera-mais-um-beta-do-firefox.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4030538827226901668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4030538827226901668'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/12/mozilla-libera-mais-um-beta-do-firefox.html' title='Mozilla libera mais um Beta do Firefox 3.6'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-7040605313920141241</id><published>2009-11-18T13:06:00.000-08:00</published><updated>2009-11-18T13:09:35.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight 4'/><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><title type='text'>Versão beta do Silverlight 4 já pode ser baixada</title><content type='html'>&lt;span style="font-family:arial;"&gt;A Microsoft anunciou nesta quarta-feira (18/11) que o &lt;/span&gt;&lt;a style="font-family: arial;" href="http://www.silverlight.net/getstarted/silverlight-4-beta"&gt;Silverlight 4 Beta&lt;/a&gt;&lt;span style="font-family:arial;"&gt; já pode ser baixado pelos desenvolvedores. A liberação do beta da plataforma surpreendeu os desenvolvedores presentes à PDC09, uma vez que o beta chega apenas quatro meses depois da versão final do Silverlight 3. A conferência para os desenvolvedores termina nesta quinta-feira e acontece em Los Angeles (EUA).&lt;br /&gt;&lt;br /&gt;Segundo o vice-presidente corporativo da plataforma .Net da Microsoft, Scott Guthrie, os desenvolvedores irão encontrar um vasto conjunto de funcionalidades para permitir a entrega de uma melhor experiência no desktop sem a necessidade de codificação adicional. O novo Silverlight inclui suporte completo ao Visual Studio 2010 – o que irá proporcionar acesso aos aplicativos do Microsoft Office e ao servidor SharePoint, além de melhorias em impressão e redes.&lt;br /&gt;&lt;br /&gt;Na parte web, o Silverlight 4 oferece suporte nativo a webcam, microfone, suporte para entrega de conteúdo multimídia por multicast e um conjunto de mais de 60 controles para aplicações interativas.&lt;br /&gt;&lt;br /&gt;“A plataforma Silverlight está presente em cerca de 45% dos dispositivos com interconectados à web e já é utilizada em serviços como o broadcast online da BBC para os Jogos Olímpicos de Inverno 2010 de Vancouver [Canadá], pela Continental Airlines, eBay, SnapFlow e Bloomber”, disse Guthrie. Segundo ele, o novo Silverlight irá permitir um avanço significativo no desenvolvimento de aplicativos para o que a Microsoft vem chamando de “três telas” (three screens): PC, browser e dispositivos móveis.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://pcworld.uol.com.br/noticias/2009/11/18/versao-beta-do-silverlight-4-ja-pode-ser-baixada/"&gt;http://pcworld.uol.com.br/noticias/2009/11/18/versao-beta-do-silverlight-4-ja-pode-ser-baixada/&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-7040605313920141241?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/7040605313920141241/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/11/versao-beta-do-silverlight-4-ja-pode.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/7040605313920141241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/7040605313920141241'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/11/versao-beta-do-silverlight-4-ja-pode.html' title='Versão beta do Silverlight 4 já pode ser baixada'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-2801038318178156944</id><published>2009-11-15T10:24:00.000-08:00</published><updated>2009-11-15T10:26:36.313-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='access'/><category scheme='http://www.blogger.com/atom/ns#' term='64bits'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7.5'/><category scheme='http://www.blogger.com/atom/ns#' term='asp'/><title type='text'>Utilizando asp clássico com access em máquina 64 Bits</title><content type='html'>&lt;span style="font-family: arial;"&gt;Pa&lt;/span&gt;ra quem trabalha com o asp clássico e utiliza máquina 64 bits pode passar pelo mesmo problema que eu tive esses dias, por isso escrevi um artigo bem simples de como resolver este problema.&lt;br /&gt;&lt;br /&gt;O erro exibido é este:&lt;br /&gt;Microsoft OLE DB Provider for ODBC Drivers error '80004005'             &lt;br /&gt;            [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified             &lt;br /&gt;&lt;br /&gt;Pra quem quiser a solução: &lt;a href="http://www.quintelab.com.br/Artigos/IIS.asp"&gt;http://www.quintelab.com.br/Artigos/IIS.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-2801038318178156944?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/2801038318178156944/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/11/utilizando-asp-classico-com-access-em.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/2801038318178156944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/2801038318178156944'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/11/utilizando-asp-classico-com-access-em.html' title='Utilizando asp clássico com access em máquina 64 Bits'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-4985391609076662439</id><published>2009-11-12T07:25:00.000-08:00</published><updated>2009-11-12T07:28:19.936-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orkut'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google tira do ar grupo que aplicava golpe com a promessa de convites para Orkut</title><content type='html'>&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Comunidade prometia acesso ao novo Orkut por meio de código que, sem autorização do usuário, escrevia mensagens em perfis dos seus contatos.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;O Google Brasil tirou do ar uma comunidade no Orkut que prometia uma técnica para acesso à nova versão da rede social, mas aplicava um golpe.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;A comunidade "Orkut Novo Oficial!" saiu do ar na tarde de terça-feira (10/11), quando contava com cerca de 30 mil membros. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;O grupo era coordenado por um perfil falso de Danilo Miedi, personagem criado pelo Google Brasil para concentrar a distribuição de convites para o novo Orkut.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Discussão na comunidade excluída afirmava que usuários do Orkut não precisavam de convites para acessar o novo Orkut, bastando colar um código na barra de endereços do navegador.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;O método remetia o usuário a um código JavaScript hospedado fora do Orkut que se aproveitava do perfil autenticado e enviava mensagens para alastrar ainda mais o golpe.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;O perfil que experimentava a técnica escrevia mensagens em fotos do álbum dos seus contatos e na discussão aberta na comunidade excluída, atestando o sucesso do método, sem a autorização do usuário.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Análise do código feita pelo IDG Now! mostra ainda que uma terceira mensagem era publicada na página de recados de um usuário conhecido como "Willian Rox".&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Pouco antes de o Google Brasil tirar a comunidade do ar, cerca de quatro mil perfis haviam escrito, sem a ação dos usuários, mensagens na comunidade que diziam "SOBE O TOPICO UP! Porque Funciona".&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Segundo o Google Brasil, o acesso ao novo Orkut, revelado no final de outubro, é feito apenas mediante convites, distribuídos pelo personagem Danilo ou por contatos que já estejam com a nova interface.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;É possível também encontrar convites no site de leilões Mercado Livre, com preços que chegam a quarenta reais.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;Fonte: &lt;a href="http://idgnow.uol.com.br/internet/2009/11/12/google-tira-do-ar-grupo-que-aplicava-golpe-prometendo-convites-para-orkut/"&gt;http://idgnow.uol.com.br/internet/2009/11/12/google-tira-do-ar-grupo-que-aplicava-golpe-prometendo-convites-para-orkut/&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-4985391609076662439?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/4985391609076662439/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/11/google-tira-do-ar-grupo-que-aplicava.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4985391609076662439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/4985391609076662439'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/11/google-tira-do-ar-grupo-que-aplicava.html' title='Google tira do ar grupo que aplicava golpe com a promessa de convites para Orkut'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-6743854440840703674</id><published>2009-11-05T13:00:00.000-08:00</published><updated>2009-11-06T06:55:00.883-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mozilla firefox'/><title type='text'>Firefox 3.6 Beta1</title><content type='html'>Welcome, Beta Tester!&lt;br /&gt;&lt;br /&gt;Acabei de instalar a versão 3.6 Beta 1 do Firefox, estão prometendo suporte até mesmo ao HTML5, espero não ser supreendido com Bugs desta versão, apesar de ser quase inevitável a versão Beta 1 ter bugs.  De qualquer forma ta instalado.&lt;br /&gt;&lt;br /&gt;Só to achando estranho que ainda não achei o ícone do Echofon. Será que esta versão ainda não da suporte?&lt;br /&gt;&lt;br /&gt;Edit.: Acabei de descobrir que não é compatível!!    =(&lt;br /&gt;&lt;br /&gt;Quem quiser ficar por dentro das novidades: &lt;a href="http://www.mozilla.com/en-US/firefox/3.6b1/whatsnew/"&gt;http://www.mozilla.com/en-US/firefox/3.6b1/whatsnew/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E quem quiser fazer o download: &lt;a href="http://www.mozilla.com/en-US/firefox/all-beta.html"&gt;http://www.mozilla.com/en-US/firefox/all-beta.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-6743854440840703674?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/6743854440840703674/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/11/firefox-36-beta1.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/6743854440840703674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/6743854440840703674'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/11/firefox-36-beta1.html' title='Firefox 3.6 Beta1'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-3085154187258783707</id><published>2009-11-05T08:28:00.000-08:00</published><updated>2009-11-05T10:33:25.029-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cópia'/><category scheme='http://www.blogger.com/atom/ns#' term='Plágio'/><title type='text'>Cópia de artigos</title><content type='html'>Utilizar artigos de outros autores em seu site não tem problema, desde que postem a fonte, o link de onde o artigo foi retirado.&lt;br /&gt;&lt;br /&gt;Mas existem colegas na comunidade que não respeitam isso, perdemos horas para escrever algo legal, editar imagens. Ae vem um colega e simplemente copia.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;P&lt;/span&gt;or favor adicione os fontes quando quiser exibir algum artigo em seu site ou blog.&lt;br /&gt;&lt;a href="http://jpwebmaster.wordpress.com/2009/10/23/instalando-o-ajax-control-toolkit-no-visual-studio-2008-imasters-foruns/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-3085154187258783707?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/3085154187258783707/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/11/copia-de-artigos.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/3085154187258783707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/3085154187258783707'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/11/copia-de-artigos.html' title='Cópia de artigos'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-1784008850495003559</id><published>2009-10-21T14:49:00.000-07:00</published><updated>2009-11-05T08:36:14.059-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET C# VB.NET JQuery quintelab'/><title type='text'>Visual Studio 2010 Beta 2</title><content type='html'>&lt;span class="style2"&gt;A Microsoft disponibilizou hoje para download público o Beta 2 do Visual Studio 2010 e do .NET Framework 4.0. O Visual Studio 2010 Beta 2 está disponível apenas como um 'Web Installer', que baixa e instala apenas os componentes necessários.&lt;br /&gt;&lt;br /&gt;O .NET Framework 4.0 está disponível para as plataformas x86, x64 e IA64 também como um Web Installer. O Visual Studio 2010 e o .NET Framework 4.0 fazem parte da nova geração da plataforma de desenvolvimento da Microsoft e a versão final de ambos será lançada no dia 22 de março de 2010.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://www.baboo.com.br/absolutenm/templates/content.asp?articleid=36724&amp;amp;zoneid=6&amp;amp;resumo="&gt;http://www.baboo.com.br/absolutenm/templates/content.asp?articleid=36724&amp;amp;zoneid=6&amp;amp;resumo=&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-1784008850495003559?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/1784008850495003559/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/10/visual-studio-2010-beta-2.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1784008850495003559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/1784008850495003559'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/10/visual-studio-2010-beta-2.html' title='Visual Studio 2010 Beta 2'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-7526458826334091665</id><published>2009-09-26T22:29:00.001-07:00</published><updated>2009-09-26T22:29:38.962-07:00</updated><title type='text'>Utilizando o ThickBox com asp.net</title><content type='html'>Artigo sobre como usar o ThicBox com asp.net:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.quintelab.com.br/Artigos/ThickBox.asp"&gt;http://www.quintelab.com.br/Artigos/ThickBox.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-7526458826334091665?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/7526458826334091665/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/09/utilizando-o-thickbox-com-aspnet.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/7526458826334091665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/7526458826334091665'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/09/utilizando-o-thickbox-com-aspnet.html' title='Utilizando o ThickBox com asp.net'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307134333701116373.post-11993523050107616</id><published>2009-09-26T22:24:00.000-07:00</published><updated>2009-09-26T22:26:35.763-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET C# VB.NET JQuery quintelab'/><title type='text'>Site pessoal</title><content type='html'>&lt;pre id="line1"&gt;Artigos sobre ASP.NET,C#,VB.NET e JQuery:&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.quintelab.com.br"&gt;http://www.quintelab.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2307134333701116373-11993523050107616?l=quintelab.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quintelab.blogspot.com/feeds/11993523050107616/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://quintelab.blogspot.com/2009/09/site-pessoal.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/11993523050107616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307134333701116373/posts/default/11993523050107616'/><link rel='alternate' type='text/html' href='http://quintelab.blogspot.com/2009/09/site-pessoal.html' title='Site pessoal'/><author><name>quintelab</name><uri>http://www.blogger.com/profile/13852391027760728062</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_nOp3WKgrrcY/St-B0GsV3FI/AAAAAAAAAAM/5s76fOHv4yw/S220/quintelab%2540terra.com.br_deb8fb0a.jpg'/></author><thr:total>0</thr:total></entry></feed>
