Поиск…


Синтаксис

  1. public delegate void ActionClick();

    public event ActionClick OnResetClick;
    

замечания

Я не нашел недостатков в этом подходе, но есть несколько вещей, которые делают это немного проблематичным.

  1. Вам нужно добавить обработчик событий для каждого события. Если вы не добавите обработчики событий в событие OnInit на странице, вы можете столкнуться с некоторыми проблемами, которые возникают при повторном отправке страницы, вы потеряете назначение события (поскольку ASP.NET не имеет состояния, что не относится к элементам управления Windows) ,
  2. В этом подходе вам необходимо соблюдать события жизненного цикла страницы. Иногда, когда вы работаете над дизайнером, может быть случай, когда обработчик события теряется без вашего уведомления.
  3. Даже если вы не добавили обработчик событий, вы не получите никаких ошибок или предупреждений. Если у вас несколько страниц для выполнения одного и того же действия, нет никакой гарантии, что все имена методов будут одинаковыми; разработчик может выбрать свои собственные имена методов, что уменьшает ремонтопригодность кода.

Делегирование события из пользовательского элемента управления в aspx

Обычно мы выбираем этот подход, если хотим получить полную инкапсуляцию и не хотим публиковать наши методы.

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

Пользовательский элемент управления указывает некоторые публичные события, такие как OnAddClick , OnEditClick и т. OnAddClick , OnEditClick объявляют делегат. Любой, кто хочет использовать эти события, должен добавить EventHandler для выполнения, когда происходит соответствующее событие нажатия кнопки.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow