Zoeken…


Syntaxis

  1. public delegate void ActionClick();

    public event ActionClick OnResetClick;
    

Opmerkingen

Ik heb geen nadelen gevonden in deze aanpak, maar er zijn een paar dingen die dit een beetje problematisch maken.

  1. U moet voor elke gebeurtenis een gebeurtenishandler toevoegen. Als u de gebeurtenishandlers niet toevoegt aan de OnInit-gebeurtenis van de pagina, kunt u problemen tegenkomen waardoor u bij het plaatsen van een pagina de toewijzing van de gebeurtenis verliest (aangezien ASP.NET staatloos is, wat niet het geval is met Windows-besturingselementen) .
  2. In deze benadering moet u de gebeurtenissen in de levenscyclus van de pagina respecteren. Soms wanneer u aan de Designer werkt, kan er een geval zijn waarin de gebeurtenishandler zonder uw bericht verdwaalt.
  3. Zelfs als u de gebeurtenishandler niet hebt toegevoegd, ontvangt u geen fouten of waarschuwingen. Als u meerdere pagina's hebt om dezelfde actie uit te voeren, is er geen garantie dat alle methodenamen hetzelfde zijn; de ontwikkelaar kan zijn eigen methode namen kiezen, wat de onderhoudbaarheid van de code vermindert.

Delegatie van gebeurtenis van gebruikersbeheer naar aspx

Normaal gesproken kiezen we voor deze aanpak als we volledige inkapseling willen en onze methoden niet openbaar willen maken.

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

Het gebruikersbeheer specificeert sommige openbare gebeurtenissen zoals OnAddClick , OnEditClick , enz., Die een gemachtigde verklaren. Iedereen die deze gebeurtenissen wil gebruiken, moet de EventHandler toevoegen om uit te voeren wanneer de overeenkomstige gebeurtenis met de klik op de knop plaatsvindt.

Aspx-ontwerp

<%@ 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow