Formas de realizar o velho include

Extraído do site www.codigofonte.com.br

No ASP antigo utilizavamos a instrução #Include para anexar arquivos. Desta forma generalizávamos pequenos trechos de código ou de design. Por exemplo, um menu de topo poderia ficar em um arquivo a parte e levar #include.

No ASP .NET agora trabalhamos de forma mais orientada a objeto. Um trecho que desejamos reaproveitar pode ser criado na forma de um web user control (arquivo .ascx) e inserido em todas as páginas do site.

Mas mesmo um Web User Control ainda não é um padrão visto como totalmente orientado a objeto. Este controle precisa ser inserido página por página em todas as páginas do site em que desejamos que ele apareça. E pode acontecer de não ser apenas um, mas serem combinações de 2 ou 3.

Para resolver este problema podemos utilizar um padrão de desenvolvimento já documentado. Esses padrões de desenvolvimento são chamados de design patterns.

Bem, então para melhorar ainda mais a aplicação do include, podemos aplicar o pattern de pageController. Vejamos como funciona.

Digamos que temos 2 ou 3 controles para serem inseridos em todas as páginas ou, pelo menos, em muitas. Podemos então criar uma classe, uma classe comum mesmo, herdando as características da classe system.web.ui.page.

Nesta classe fazemos um override do método onload. Esse método é o responsável por chamar o evento load na classe page. Neste método podemos carregar dinamicamente, via código, controles ascx que desejamos que apareçam em páginas desta "categoria". Veja um exemplo, abaixo, com um único controle ascx :

Pronto. Temos uma classe base para montarmos as páginas. Para garantir agora que todos os webForms seguirão este padrão devemos mudar a instrução inherits em todos os webforms, trocando o inherits system.web.ui.page pelo inherits nossaClasse

Automaticamente todos os webforms que aplicarem essa herança estarão com os componentes padrões sendo exibidos

Veja o código abaixo:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
   Dim x As System.Web.UI.Control
   x = Me.LoadControl("titulo.ascx")
   Me.Controls.Add(x)
   MyBase.OnLoad(e)
End Sub