Поиск…
Синтаксис
public delegate void ActionClick();
public event ActionClick OnResetClick;
замечания
Я не нашел недостатков в этом подходе, но есть несколько вещей, которые делают это немного проблематичным.
- Вам нужно добавить обработчик событий для каждого события. Если вы не добавите обработчики событий в событие OnInit на странице, вы можете столкнуться с некоторыми проблемами, которые возникают при повторном отправке страницы, вы потеряете назначение события (поскольку ASP.NET не имеет состояния, что не относится к элементам управления Windows) ,
- В этом подходе вам необходимо соблюдать события жизненного цикла страницы. Иногда, когда вы работаете над дизайнером, может быть случай, когда обработчик события теряется без вашего уведомления.
- Даже если вы не добавили обработчик событий, вы не получите никаких ошибок или предупреждений. Если у вас несколько страниц для выполнения одного и того же действия, нет никакой гарантии, что все имена методов будут одинаковыми; разработчик может выбрать свои собственные имена методов, что уменьшает ремонтопригодность кода.
Делегирование события из пользовательского элемента управления в 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