Como executar um método de uma página em um UserControl

by Fabiano 19. junho 2008 00:32

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...

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Fabiano Belmonte

Senior Architect, especialista em aplicações e-business com larga experiência em B2B (Submarino. Com e Saraiva.Com). Trabalha há 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas áreas: instituições financeiras (sistema SPB), e-commerce, gerenciamento logístico entre outras.