Buscar..


Sintaxis

  1. public delegate void ActionClick();

    public event ActionClick OnResetClick;
    

Observaciones

No he encontrado ninguna desventaja en este enfoque, pero hay algunas cosas que hacen que esto sea un poco problemático.

  1. Es necesario agregar un controlador de eventos para cada evento. Si no agrega los controladores de eventos en el evento OnInit de la página, puede enfrentar algunos problemas que en la publicación de la página atrás, perderá la asignación del evento (ya que ASP.NET no tiene estado, lo que no es el caso con los controles de Windows) .
  2. En este enfoque, debe respetar los eventos del ciclo de vida de la página. Algunas veces, cuando está trabajando en el Diseñador, puede haber un caso en el que el controlador de eventos se pierda sin su notificación.
  3. Incluso si no ha agregado el controlador de eventos, no obtendrá ningún error o advertencia. Si tiene varias páginas para realizar la misma acción, no hay garantía de que todos los nombres de los métodos sean iguales; el desarrollador puede elegir sus propios nombres de métodos, lo que reduce la capacidad de mantenimiento del código.

Delegación de eventos del control de usuario a aspx

Normalmente, optamos por este enfoque si queremos una encapsulación completa y no queremos hacer públicos nuestros métodos.

Ascx

<div style="width: 100%;">
  <asp:Button ID="btnAdd" runat="server" 
    Text="Add" OnClick="btnAdd_Click"></asp:button>
  <asp:button id="btnEdit" runat="server" 
    text="Edit" onclick="btnEdit_Click"> </asp:button>
  <asp:button id="btnDelete" runat="server" 
    text="Delete" onclick="btnDelete_Click">    </asp:Button>
  <asp:button id="btnReset" runat="server" 
    text="Reset" onclick="btnReset_Click"></asp:button>
</div>

Ascx.cs

public delegate void ActionClick();

public partial class EventDelegation : System.Web.UI.UserControl
{
    public event ActionClick OnAddClick;
    public event ActionClick OnDeleteClick;
    public event ActionClick OnEditClick;
    public event ActionClick OnResetClick;
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        if(OnAddClick!= null)
        {
            OnAddClick();
        }
    }

    protected void btnEdit_Click(object sender, EventArgs e)
    {
        if (OnEditClick != null)
        {
            OnEditClick();
        }
    }

    protected void btnDelete_Click(object sender, EventArgs e)
    {
        if(OnDeleteClick!= null)
        {
            OnDeleteClick();
        }
    }

    protected void btnReset_Click(object sender, EventArgs e)
    {
        if(OnResetClick!= null)
        {
            OnResetClick();
        }
    }
}

El control de usuario especifica algunos eventos públicos como OnAddClick , OnEditClick , etc., que declaran un delegado. Cualquier persona que quiera usar estos eventos debe agregar EventHandler para que se ejecute cuando se produzca el evento de clic de botón correspondiente.

Diseño aspx

<%@ Register src="Controls/EventDelegation.ascx" 
       tagname="EventDelegation" tagprefix="uc1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <uc1:Direct ID="Direct1" runat="server" />
        </div>
        </form>
    </body>
    </html>

Aspx.cs

public partial class EventDelegation : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        ActionControl.OnAddClick += ActionControl_OnAddClick;
        ActionControl.OnDeleteClick += ActionControl_OnDeleteClick;
        ActionControl.OnEditClick += ActionControl_OnEditClick;
        ActionControl.OnResetClick += ActionControl_OnResetClick;
    }

    private void ActionControl_OnResetClick()
    {
        Response.Write("Reset done.");
    }

    private void ActionControl_OnEditClick()
    {
        Response.Write("Updated.");
    }

    private void ActionControl_OnDeleteClick()
    {
        Response.Write("Deleted.");
    }

    private void ActionControl_OnAddClick()
    {
        Response.Write("Added.");
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow