Nome oficial do Atlas revelado

Acabou de ser revelado o nome oficial que o Atlas terá. Atlas é o codinome pelo qual é conhecida a implementação da Microsoft para técnicas AJAX. Serão vários nomes, de acordo com o módulo:

  • a biblioteca javascript que roda nos browsers será chamada de Microsoft AJAX Library;
  • a parte que roda no servidor será o ASP.NET 2.0 AJAX Extensions;
  • já o Atlas Control Toolkit foi batizado de ASP.NET AJAX Control Toolkit;

No anúncio, também foi descrito um Roadmap para o lançamento da versão 1.0 do Atlas, que será totalmente compatível com o Visual Studio 2005.

Ricardo Oneda.

Web Application Project lançado

A versão final do Visual Studio 2005 Web Application Project está disponível para download. Para quem não sabe, este add-in permite trabalhar com aplicações ASP.NET 2.0 no Visual Studio 2005 de maneira semelhante ao Visual Studio 2003, ou seja, gerando uma DLL para o projeto na pasta bin, ao invés de enviar o código-fonte da aplicação para o servidor, que é como funciona o modelo de projeto Web Site, que continua existindo.

Este add-in também estará disponível no Service Pack 1 do Visual Studio 2005 e, antes de instalá-lo, é necessário instalar uma outra atualização. Infelizmente, este add-in não é suportado no Visual Web Developer Express.

Referências:
O novo (e o mais novo ainda!) modelo de compilação do ASP.NET 2.0
Novidades do .NET 2.0: mudanças na infra-estrutura do ASP.NET 2.0

Ricardo Oneda.

Utilizando code-behind sem pré-compilação no ASP.NET 1.X

Uma das grandes vantagens trazidas pelo ASP.NET foi o modelo de codificação batizado de code-behind, no qual o código server-side (por exemplo, C# ou VB.NET) fica separado do código HTML da página, ao contrário da abordagem do ASP tradicional, que misturava tudo e gerava muitos problemas, principalmente na hora da manutenção.

Com o lançamento do ASP.NET 2.0, o modelo de codificação foi aprimorado e o modelo de compilação padrão suportado pelo Visual Studio 2005 passou a ser o de tempo de execução, ou seja, é necessário enviar os arquivos code-behind para o servidor. O que muita gente não sabe é que este modelo também era suportado pelo ASP.NET 1.X, mas não era suportado pelo Visual Studio .NET 2002 ou 2003.

Vou demonstrar como isso é possível. Abra o Visual Studio .NET 2002 ou 2003 e crie um novo projeto do tipo ASP.NET Web Application chamado CodeBehind. Neste exemplo utilizarei a linguagem C#, mas poderia ser VB.NET, sem problema algum. Arraste um controle do tipo Label para o WebForm. No evento Page_Load do WebForm, adicione o seguinte código:

Label1.Text = "Olá Mundo sem pré-compilação!";

Agora, vá para a parte HTML da página WebForm1.aspx e acrescente o atributo Scr à diretiva Page, que deverá ficar parecida com o código abaixo:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CodeBehind.WebForm1" Src="WebForm1.aspx.cs"%>

Salve os arquivos mas NÃO compile sua aplicação. Abra o arquivo Global.asax no Notepad e exclua a propriedade Inherits. O arquivo deverá ficar assim:

<%@ Application Codebehind="Global.asax.cs" %>

Agora, vá ao browser de sua preferência e digite a URL da sua aplicação, que deve ser http://localhost/CodeBehind/WebForm1.aspx e perceba que a mensagem "Olá Mundo sem pré-compilação!" aparece no browser. Você perceberá que na primeira requisição há uma certa demora, pois a aplicação está sendo compilada. A partir da segunda requisição, não haverá mais esta demora, já que o assemblie já se encontra compilado. Verifique na pasta bin da sua aplicação que não há nenhuma DLL, que seria gerada caso utilizássemos a pré-compilação do Visual Studio. Não há DLL na pasta bin porque sua aplicação foi compilada em tempo de execução, ou seja, o code-behind foi compilado no momento em que a página foi acessada.

Mas você deve estar se perguntando: mas qual a utilidade disso? A principal vantagem é que quando não utilizamos pré-compilação, qualquer alteração no código é detectada, o que provoca uma nova compilação, mas a aplicação NÃO é reinicializada, ao contrário do que aconte quando geramos uma DLL através da pré-compilação do Visual Studio e a atualizamos com uma nova versão. Vamos a uma demonstração. Altere o código do evento Page_Load para:

 if (Session["numero"] != null)
 {
     Session["numero"] = Convert.ToInt32(Session["numero"]) + 1;
 }
 else
 {
     Session["numero"] = 1;
 }

 Label1.Text = "Olá Mundo sem pré-compilação!";
 Label1.Text += "
" + Session["numero"].ToString() + " vezes";

Perceba que eu criei uma variável de sessão (objeto Session) chamada "numero", que funcionará como um contador de visitas para o usuário naquela sessão. Salve o arquivo e atualize a página no browser e perceba o contador funcionando. Agora, volte ao Visual Studio e altere a linha 10 para:

Label1.Text = "Olá Mundo sem pré-compilação alterado!";

 

Volte ao browser e atualize a página. Você deverá notar que o texto apresentado na página foi alterado mas o contador (e, portanto, a variável de sessão) não foi reinicilizado, ou seja, a aplicação não foi reinicilizada. Se tentarmos fazer isso utilizando a pré-compilação do Visual Studio, veremos que a cada vez que uma nova DLL é gerada, a aplicação é reinicializada e, conseqüentemente, as variáveis de sessão (objeto Session), de aplicação (objeto Application), etc, o que pode trazer problemas para a aplicação e os usuários.

A desvantagem é que precisamos enviar o código fonte da aplicação para o servidor, o que pode não ser interessante em termos de segurança. Cabe a você analisar as vantagens e desvantagens de cada modelo e escolher o que melhor atende suas necessidades.

Referências:
Web Forms Code Model
Meditating Upon the ASP.NET Code-Behind Model

Ricardo Oneda.

Dica: Definindo o Theme de uma aplicação Web

No ASP.NET 2.0, podemos definir o Theme de uma aplicação web através do arquivo de configuração web.config. O código abaixo, que deve ser colocado dentro da seção <system.web> do web.config, demonstra como isso pode ser feito:

	<pages theme="MeuTema" />

Para saber mais sobre Themes do ASP.NET 2.0, leia meus artigos sobre o assunto.

Ricardo Oneda

Exibindo mensagem no GridView quando não há registros

O controle GridView do ASP.NET 2.0 trouxe duas propriedades que permitem exibir uma mensagem quando a fonte de dados a qual o GridView está vinculado não retornar dados: EmptyDataTemplate (permite utilizar um template com a mensagem) e EmptyDataText (um simples texto que será exibido). Irei fazer um pequeno exemplo de como utilizar estas propriedades.

Para isso, utilizarei o Visual Studio 2005 e o SQL Server 2005 Express com o banco de dados de exemplo Northwind. Apesar da Microsoft recomendar o uso do banco de dados de exemplo AdventureWorks, que foi criado especialmente para o SQL Server 2005, optei por utilizar o Northwind, pois ele é mais conhecido e também porque permitirá que pessoas com o SQL Server 2000 possam utilizá-lo. Caso você não tenha o Northwind, você pode fazer o seu download. Após baixar o arquivo SQL2000SampleDb.msi e executá-lo, será criada uma pasta em "C:\SQL Server 2000 Sample Databases" com os scripts e arquivos MDF e LDF dos banco de dados Northwind e Pubs. Abra o SQL Express Manager e execute o comando abaixo para attachar o Northwind à instância do SQL Express:

EXEC sp_attach_db N'Northwind',N'C:\SQL Server 2000 Sample Databases\NORTHWND.MDF'

Agora vá ao Visual Studio 2005 e crie um novo Web Site chamado GridViewVazio. No Server Explorer (menu View > Server Explorer), clique com o botão direito em Data Connections e escolha a opção Add Connection. Na tela que é apresentada, iremos definir nossa fonte de dados (Data Source). Escolha Microsoft SQL Server e clique no botão Continue. Na próxima tela, entre com o nome da instância onde está rodando o SQL Express (no padrão NOME_MAQUINA\SQLEXPRESS) e selecione o banco de dados Northwind. Você deve ver uma tela parecida com a da imagem abaixo. Clique no botão Test Connection para verificar se está tudo certo e depois em OK.

Vá para o design da página Default.aspx e arraste um TextBox e um Button para ela. Logo abaixo, a partir do Server Explorer, arraste a tabela Products do banco de dados Northwind. Perceba que foram criados um controle GridView e um SqlDataSource. Você deve ter uma tela parecida com a figura abaixo.

Agora, vamos fazer com que os produtos sejam exibidos no GridView de acordo com o que digitarmos no TextBox, funcionando como uma pesquisa. Selecione o SqlDataSource e clique na seta no canto superior direito para termos acesso a sua SmartTag. Selecione a opção Configure Data Source. Não altere nada na primeira tela e clieque em Next. Na próxima tela é apresentada nossa query T-SQL que desejamos alterar. Clique no botão WHERE. Em Column, escolha o campo ProductName. Em Operator escolha o operador LIKE do T-SQL. Em Source, escolha Control, já que nosso parâmetro será digitado no controle TextBox. Em ControlID, selecione TextBox1, que é o ID do nosso controle TextBox.

Clique em Add e depois em OK. Na próxima tela, clique em Next e, finalmente, em Finish. Também podemos mudar o layout de nosso GridView, clicando em AutoFormat a partir de sua SmartTag. Escolha um formato de sua preferência. Selecione o GridView e exiba a janela de propriedades (View > Propertie Window). Altere o valor a propriedade EmptyDataText para "Não foram encontrados registros para a busca."

Execute a aplicação e perceba que a mensagem de que "Não foram encontrados registros para a busca." é exibida, já que não há nada digitado no caixa de texto. 

Digite algum texto que exista na tabela de produtos e veja que o GridView vem preenchido.

Outra maneira de se exibir uma mensagem é utilizando o EmptyDataTemplate, que lhe dá mais flexibilidade, já que podemo definir um template (trecho de código HTML personalizado). Volte ao Visual Studio 2005, selecione o GridView e, a partir de sua SmartTag, selecione a opção Edit Templates. O EmptyDataTemplate é então aberto para que possamos editá-lo. Neste exemplo, utilizei a frase "Não foram encontrados registros para a busca." em negrito e na cor vermelha. Fiz uma simples personalização, mas perceba que poderia fazer algo mais complexo.

Na SmartTag do EmptyDataTemplate, selecione End Template Editing para retornar ao design da página Default.aspx. Se você visualizar o fonte da página Default.aspx, encontrará a definição do template utilizado no EmptyDataTemplate:

	<EmptyDataTemplate>
		<span style="color: red"><strong>Não foram encontrados registros para a busca.</strong></span>
	</EmptyDataTemplate>

Execute a aplicação e perceba que agora a mensagem exibida é aquela definda pelo EmptyDataTemplate.

Espero que tenham gostado e até a próxima.

 

Ricardo Oneda

 

Artigos sobre Themes

Escrevi alguns artigos sobre os Themes do ASP.NET 2.0, um recurso que permite controlar a aparência de controles ASP.NET (uma espécie de CSS com muito mais recursos) e que, juntamente com as Master Pages, são as principais ferramentas para se manter a identidade visual de uma aplicação web, permitindo uma grande personalização e facilidade de manutenção. Como sempre, espero seus comentários, sugestões e críticas:

Utilizando Themes no ASP.NET 2.0 - Parte 1
Utilizando Themes no ASP.NET 2.0 - Parte 2
Utilizando Themes no ASP.NET 2.0 - Parte 3
Utilizando Themes no ASP.NET 2.0 - Parte 4

Aproveito o último post do ano para desejar a todos os amigos um ótimo ano de 2006!

Ricardo Oneda

O novo (e o mais novo ainda!) modelo de compilação do ASP.NET 2.0

Sem dúvida, uma das mudanças do ASP.NET 2.0 que mais causou impacto foi no modelo de compilação. Para aqueles acostumados com o modelo do ASP.NET 1.X e que estão confusos sobre o novo modelo, sugiro a leitura do artigo Codebehind and Compilation in ASP.NET 2.0, publicado na MSDN Magazine americana.

Aliás, esta alteração deve ter sido tão polêmica, que já estão planejando um novo modelo de projeto Web para o Visual Studio 2005 (e olha que ele acabou de ser lançado!). Neste novo modelo, o funcionamento será semelhante ao que tínhamos no ASP.NET 1.X/Visual Studio 2003, ou seja, ao compilarmos a aplicação, será gerada uma única DLL, entre outras "novidades". Este novo tipo de projeto será disponibilizado gratuitamente para download e será "incorporado" pelo Visual Studio 2005.

Se você está com dúvidas em relação a migração de aplicações ASP.NET 1.X para ASP.NET 2.0, sugiro a leitura dos seguintes artigos:

Step-By-Step Guide to Converting Web Projects from Visual Studio .NET 2002/2003 to Visual Studio 2005
Common Web Project Conversion Issues and Solutions
The Great Migration

Atualizado em 19/12
Já está disponível para download um preview do novo modelo de projeto Web para o Visual Studio 2005. Após instalá-lo, no momento de criar um novo projeto, você poderá escolher entre o template "ASP.NET Web Site" (o padrão do Visual Studio 2005) ou "ASP.NET Web Application" (o novo modelo que é parecido com o antigo do Visual Studio 2003). Este preview não é suportado pelo Visual Web Developer Express.

Ricardo Oneda

Artigo sobre Master Pages - partes 2 e 3

Dando continuidade ao artigo Desvendando as Master Pages - Parte 1, foram publicadas, no site do BrDevelopers, as partes 2 e 3 desta série de artigos. Na parte 2 é mostrado como podemos acessar controles de uma Master Page a partir de uma página de conteúdo e, na parte 3, como que se carrega uma Master Page em tempo de execução. Leiam e deixem suas opiniões!

Desvendando as Master Pages - Parte 2
Desvendando as Master Pages - Parte 3

Ricardo Oneda

Novidades do .NET 2.0: SQL Cache Dependency

No ASP.NET 1.X, era possível criar dependências para valores armazenados no objeto Cache do namespace System.Web.Caching. A invalidação do Cache poderia ficar associada a vários eventos, como após um determinado período de tempo, mudança em um ou mais arquivos e/ou diretórios ou mudança em um valor de outra chave de cache. Sempre que um desses eventos ocorresse, o cache seria inutilizado. Era possível até mesmo informar um delegate que deveria ser chamado quando o evento de invalidação do cache ocorresse.

Uma grande melhoria do ASP.NET 2.0 nesse campo foi a introdução da possibilidade de se criar uma dependência do Cache com o banco de dados SQL Server. Assim, sempre que algum dado for alterado no banco de dados, o cache é invalidado. Deste modo, é possível ter os benefícios de performance que o uso de cache propricia juntamente com dados sempre atualizados.

Referências
Improved Caching in ASP.NET 2.0
SqlCacheDependency Class (System.Web.Caching)
Walkthrough: Using ASP.NET Output Caching with SQL Server

Ricardo Oneda

Novidades do .NET 2.0: Cross-Page Postback


Na minha opinião, uma das grandes limitações do ASP.NET 1.X era a incapacidade de se fazer um post para outra página de forma simples. Existiam formas de se contornar tal limitação, como o uso de Response.Redirect() ou do Server.Transfer(), mas exigia um certo trabalho. No ASP.NET 2.0 essa limitação foi extinta graças a introdução da propriedade PostBackUrl. Basta configurar esta propriedade em algum controle que gera um post (como um botão) fornecendo o nome da página de destino e pronto. Caso ela não seja configurada, o post é feito para a própria página.

O conteúdo da página anterior pode ser acessado através da propriedade PreviousPage da classe Page, que também possui a nova propriedade IsCrossPagePostBack, que tem função semelhante à propriedade IsPostBack, velha conhecida do ASP.NET 1.X.

Referências:

Cross-Page Posting in ASP.NET Web Pages
Design Considerations for Cross Page Post Backs in ASP.NET 2.0

Ricardo Oneda