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.
Obrigada Israel,
Esse artigo foi de grande ajuda.