Recherche…


Syntaxe

  1. public delegate void ActionClick();

    public event ActionClick OnResetClick;
    

Remarques

Je n'ai pas trouvé d'inconvénient dans cette approche mais il y a quelques petites choses qui rendent cela un peu problématique.

  1. Vous devez ajouter un gestionnaire d'événement pour chaque événement. Si vous n'ajoutez pas les gestionnaires d'événements dans l'événement OnInit de la page, vous risquez de rencontrer des problèmes qui, lors de la publication de la page, vous feront perdre l'affectation d'événement (car ASP.NET est sans état, ce qui n'est pas le cas avec les contrôles Windows) .
  2. Dans cette approche, vous devez respecter les événements du cycle de vie des pages. Parfois, lorsque vous travaillez sur le concepteur, il se peut que le gestionnaire d'événements se perde sans votre avis.
  3. Même si vous n'avez pas ajouté le gestionnaire d'événements, vous n'obtiendrez aucune erreur ou aucun avertissement. Si vous avez plusieurs pages pour effectuer la même action, rien ne garantit que tous les noms de méthode seront identiques. le développeur peut choisir ses propres noms de méthode, ce qui réduit la maintenabilité du code.

Délégation d'événement du contrôle utilisateur à aspx

Normalement, nous optons pour cette approche si nous voulons une encapsulation complète et ne souhaitons pas rendre nos méthodes publiques.

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();
        }
    }
}

Le contrôle utilisateur spécifie certains événements publics tels que OnAddClick , OnEditClick , etc., qui déclarent un délégué. Toute personne souhaitant utiliser ces événements doit ajouter le gestionnaire d'événements à exécuter lorsque l'événement de clic sur le bouton correspondant se produit.

Aspx Design

<%@ 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow