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

Comentários

5/8/2009 09:03:06 #

payday loans

Hi there I like your post

payday loans | Reply

5/8/2009 09:03:09 #

payday loans

good good�this post deserves nothing Frown  �hahaha just joking Tong �nice post Tong

payday loans | Reply

28/8/2009 10:17:34 #

bad credit loans

You are a very smart person! Smile

bad credit loans | Reply

28/9/2009 21:56:50 #

bad credit loans

Hey very nice blog!!

bad credit loans | Reply

30/1/2010 04:29:11 #

anderson

Meu muito legal essa dica ... valeu!!!

anderson | Reply

17/7/2010 15:21:33 #

Ways to Lose Weight Fast

Hi, are you accepting any advertising on your website? I'd love to purchase a banner for a month or two to my website which is closely related. Please let me know. -Bob

Ways to Lose Weight Fast | Reply

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading



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.