Contrato entre ASPX e ASCX


Nas versões anteriores do ASP.NET quando ainda não existia essa forma de compilação que é utilizada no ASP.NET 2.0, era facilmente possível dentro de um User Control (ASCX) invocar um método que está dentro de uma página ASPX, pois era somente fazer o cast da propriedade Page para o tipo da página e invocar o método desejado. Isso ainda tinha alguns problemas, já que o User Control nem sempre estaria em uma página que poderia ter o método implementado.

Com a nova forma de compilação do ASP.NET 2.0, fica difícil fazer o cast para o tipo da página, pois o nome somente será criado na compilação, ou seja, em design-time não conhecemos o tipo ainda. Se não estiver utilizando o Web Application Project (WAP) e quer ter essa possibilidade, então terá que criar um contrato (algo que já teria que ter feito nas versões anteriores :)) através de uma Interface. Esta Interface voce deverá implementá-la somente as páginas ASPX que deseja que o User Control invoque o(s) respectivo(s) método(s). Abaixo está o exemplo:

public interface IConnection
{
    void ExecuteProcedure();
}

public partial class _Default : System.Web.UI.Page, IConnection
public partial class Default2 : System.Web.UI.Page

[ ASCX ]
IConnection connection = this.Page as IConnection;
if (connection != null)
    connection.ExecuteProcedure();
else
    Response.Write(“The Page container isn’t a IConnection type!”);

Como podem reparar, a página Default.aspx implementa a Interface e a Default2.aspx não. Finalmente, dentro do UserControl, fazemos o cast para IConnection com o operador as que, se não for um tipo compatível retornará nulo. Se estiver utilizando o Visual Basic .NET 2005, então ao invés de as, utilize o operador TryCast, que tem a mesma finalidade.

Anúncios

Um comentário sobre “Contrato entre ASPX e ASCX

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s