Algumas vezes precisamos executar métodos de uma página a partir de um UserControl é, isso pode parecer muito complicado, mas não é. Isso pode ocorrer por exemplo com um UserControl de paginação quando o Usuário clica na página de destino precisa bindar novamente os dados da página, só que o método de bindar o grid está na página e o evento ocorre no controle, que são coisas distintas. Como fazer então para do controle disparar o evento na página? A seguir faremos um pequeno exemplo mostrando como faze-lo. A idéia é mostrar que é possível, e como, a partir daí e com vocês...
Vamos lá!
Em um projeto web tenho uma página default.aspx essa página tem um Label como no código abaixo:.
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblMessage" runat="server" />
</div>
</form>
</body>
Vou criar um UserControl dentro deste site. Vou chamá-lo de ucDisparaEvento.ascx no controle vide código abaixo:.
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucDisparaEvento.ascx.cs" Inherits="ucDisparaEvento" %>
Agora vou adcionar o controle a página:
***Não esqueça da diretiva de registro do controle no início da página.
<form id="form1" runat="server">
<div>
<asp:Label ID="lblMessage" runat="server" />
<br />
<uc1:ucDisparaEvento ID="ucDisparaEvento1" runat="server" />
</div>
</form>
No UserControl vou adcionar um TextBox onde poderemos digitar a mensagem e um LinkButton com um evento OnClick que fará a chamada para o método da Página “Default.aspx”
<asp:TextBox ID="txtMessage" runat="server" />
<br />
<asp:LinkButton ID="lnkExibeMsg" runat="server" Text="Exibe Mensagem na Pagina" OnClick="lnkExibeMsg_Click" />
Agora de volta a página Default.aspx vamos criar um método que irá receber uma string e imprimir no Label.
public void RecebeMensagem(string MSG)
{
lblMessage.Text = MSG;
}
Agora que são elas! Como fazer para que no onClick do controle o método RecebeMensagem na página seja executado também. Parece complicado mas ... Veja como podemos solucionar este impasse, criamos uma Interface que irá implementar esse método. Segue o código da Interface:;
public interface IMensagem
{
void RecebeMensagem(string Mensagem);
}
Uma solução simples, elegante e eficiente. Vamos lá! E agora a Página passa a implementar esta Interface.
public partial class _Default : System.Web.UI.Page, IMensagem
E agora no controle utilizamos a interface para fazer a chamada do método na página. Como no exemplo abaixo.
((IMensagem)Page).RecebeMensagem(txtMessage.Text);
Porque a página implementa esta interface que expõe o método RecebeMensagem e nos possibilita utilizá-lo no UserControl. Esta solução e bem legal porque além disso podemos controlar se a página que esta utilizando esse UserControl implementa a Interface, se não implementar podemos gerar uma exeption por exemplo,como no código abaixo.
if (this.Page is IMensagem)
((IMensagem)Page).RecebeMensagem(txtMessage.Text);
else
throw new Exception("A página precisa implementar a interface IMensagem");

É isso ai pessoal espero ter passado uma experiência nova para vocês! E que esse artigo contribua mais para seu aprendizado. Para saber mais truques como este, não percam a próxima turma de ASP.NET, pois temos muitas dicas interessantes como esta.
Bons Códigos...