Sök…


Syntax

  1. public delegate void ActionClick();

    public event ActionClick OnResetClick;
    

Anmärkningar

Jag har inte hittat några nackdelar med detta tillvägagångssätt men det finns några saker som gör detta lite problematiskt.

  1. Du måste lägga till en händelsehanterare för varje evenemang. Om du inte lägger till händelseshanterarna i OnInit-händelsen på sidan, kan du få problem som på sidvisningen kommer att förlora händelsetilldelningen (eftersom ASP.NET är statslöst, vilket inte är fallet med Windows-kontroller) .
  2. I det här tillvägagångssättet måste du respektera sidans livscykelhändelser. Vissa gånger när du arbetar med Designer kan det förekomma ett fall när evenemangshanteraren går vilse utan din uppmärksamhet.
  3. Även om du inte har lagt till händelseshanteraren får du inga fel eller varningar. Om du har flera sidor för att utföra samma åtgärd finns det ingen garanti för att alla metodnamn kommer att vara desamma; utvecklaren kan välja sina egna metodnamn, vilket minskar kodens underhållbarhet.

Delegering av händelse från användarkontroll till aspx

Normalt väljer vi detta tillvägagångssätt om vi vill ha fullständig inkapsling och inte vill offentliggöra våra metoder.

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

Användarkontrollen anger vissa offentliga händelser som OnAddClick , OnEditClick osv., Som förklarar en delegat. Alla som vill använda dessa händelser måste lägga till EventHandler för att köra när motsvarande knappklickhändelse inträffar.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow