Implementando dados de cabeçalho de página 

 

Classe ASP.NET HeadFilter

A capacidade de fixar dinamicamente valores a várias tags, que podem aparecer na seção HEAD (HEAD section) de uma página web, é freqüentemente necessária. Uma das deficiências do modelo ASP.NET, é que o conteúdo dinâmico (dynamic content) tem que ter o atributo "runat=Server", e as tags com este atributo, têm que aparecer dentro da server form tag (tag do formulário servidor). Fixar estes valores via código, torna-se uma tarefa não trivial.

 

Este artigo descreve uma solução para este problema. As soluções atualmente existentes que achamos, exigiram que fizéssemos coisas da qual o Visual Studio não gostou ou que nós não gostamos. Esta solução é muito simples de construir (pode ser usada em uma linha de código) e não interfere em nada com a arquitetura prévia já existente. Não teremos que mudar a hierarquia de herança de página, e não teremos que fazer coisas da qual o Visual Studio irá se queixar.

 

Para usar esta facilidade no site, simplesmente acrescentamos uma referência à DLL (caso a tenhamos compilado primeiro), ou inserimos o arquivo da classe .vb diretamente no projeto, e usamos a classe quando necessário.

O uso mais simples

No evento de Carga de página (Page Load), adicionamos uma linha de código:

 

Response.Filter = New HeadFilter(Response.Filter, "")

 

Estaremos simplesmente passando o texto exato que desejamos ter entre as tags e - neste caso, um título para a página. Se quisermos pré-construir uma string enorme que não só inclua o título, mas também os links CSS, os links JavaScript, os META tag, etc., isso é tudo que precisamos fazer.

Uso mais granular

Claro que podemos usar a classe de um modo mais granular, caso preferirmos. Eis aqui um exemplo deste tipo de uso. Novamente, no evento Load, adicionamos o seguinte código:

 

Dim myFilter As New HeadFilter(Response.Filter)

With myFilter

   .Title = "My Page Title"

   .BaseTarget = "_new"

   .AddMetaTag("Author", "", "Travis", "")

   'etc…

End With

Response.Filter = myFilter

O que é um filtro, na verdade?

Basicamente, o ASP.NET fornece um modo de visualizar (e modificar) os bytes, logo assim que vão para o browser. A classe Response.Filter é um objeto stream que representa os dados que vão para o browser. Existem muitos artigos on-line explicando o uso de filtros para vários propósitos. A idéia é que podemos escrever nosso próprio filtro, e aplicá-lo em um pipeline.

O nosso filtro, simplesmente procura os HEAD tags, e insere o texto entre eles, sem modificar o resto do documento.

E então, o que podemos inserir?

Quase qualquer coisa. Mas o browser (e em alguns casos o server ou o router), estão esperando determinadas coisas, como o título da página, links para folhas de estilo (style sheets), etc. Eis um resumo:

 

Exemplo BASE tag

 

Estes são implementados pelas propriedades BaseTarget e BaseHREF.

 

Exemplo de STYLE tag

body {background-color: red}

p {margin-left: 20px}

 

Isto é implementado pela propriedade Style.

 

Exemplo de TITLE tag

 

Isto é implementado pela propriedade Title.

 

Exemplo de LINK tag

 

Isto é implementado pelo método AddLinkTag. Podemos adicionar tantos quantos forem necessários.

Implementamos duas sobrecargas deste método e um método derivado. Implementamos desta maneira, porque a tag tem oito atributos, mas somente três são geralmente utilizados. Fizemos uma sobrecarga que só requer os três atributos mais freqüentemente utilizados, e outra que permite usar todos os oito, caso seja necessário. Se estivermos usando um link tag para adicionar uma folha de estilo, adicionamos o método derivado:

 

Método AddStyleSheetReference – apenas passamos o caminho para a folha de estilo e será criada uma link tag apropriada.

 

Exemplo de META tag

 

Estes são implementados pelo método AddMetaTag. Podemos adicionar tantos quantos forem necessários.

O método permite passar ambos os atributos Nome e Http-Equiv. Devemos reparar que as diretrizes HTML, estipulam que deveríamos utilizar somente o atributo Nome ou o atributo Http-Equiv, em uma determinada Meta tag. Se passarmos o atributo Nome, este será usado e o atributo Http-Equiv será ignorado. Caso contrário, o atributo Http-Equiv será usado.

Exemplo de SCRIPT tag

Para as Script tags, por serem um pouco mais complexas, não foram criadas propriedades ou métodos específicos para controlá-las. Para inserir script tags no cabeçalho, utilizamos em seu lugar, o seguinte método de propósito geral:

 

Método AddLiteralText, que deve ser utilizado para adicionar script blocks, ou qualquer outra coisa necessária que, caso contrário, não estaria disponível ao utilizarmos esta classe.

 

Detalhes a serem considerados

·         Se estivermos usando outros filtros em nosso stream de resposta, alguns ajustes podem ser necessários para garantir que não haverá interferências;

·         O filtro, na verdade, substitui qualquer texto entre as tags e . Se estivermos também usando outros meios para inserir dados, isto irá resultar em sobreescrita do texto. Por exemplo, o Visual Studio insere alguns meta tag por padrão, inclusive um título de página igual ao nome do formulário. Este filtro substituirá aqueles dados com o que porventura for criado via código.