수색…
통사론
public delegate void ActionClick();
public event ActionClick OnResetClick;
비고
이 접근법에서 어떤 단점도 발견하지 못했지만 약간 문제가있는 몇 가지 사항이 있습니다.
- 각각의 이벤트마다 이벤트 핸들러를 추가해야합니다. 페이지의 OnInit 이벤트에 이벤트 처리기를 추가하지 않으면 페이지 포스트 백에서 이벤트 할당을 잃을 수있는 몇 가지 문제가 발생할 수 있습니다 (ASP.NET은 무국적이며 Windows 컨트롤에서는 그렇지 않습니다) .
- 이 접근 방식에서는 페이지 수명주기 이벤트를 존중해야합니다. Designer에서 작업 할 때 어떤 경우에는 이벤트 처리기가 예고없이 손실 될 수 있습니다.
- 이벤트 처리기를 추가하지 않은 경우에도 오류나 경고가 발생하지 않습니다. 동일한 작업을 수행하는 페이지가 여러 개있는 경우 모든 메소드 이름이 동일하다는 보장은 없습니다. 개발자는 자신의 메서드 이름을 선택할 수 있으므로 코드의 유지 관리가 쉽지 않습니다.
사용자 컨트롤에서 aspx로 이벤트 위임
일반적으로 우리는 완전한 캡슐화를 원하고 우리의 메소드를 public으로 만들고 싶지 않다면이 접근법을 선택한다.
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
,이 이벤트는 대리자를 선언합니다. 이러한 이벤트를 사용하려는 사용자는 해당 버튼 클릭 이벤트가 발생할 때 실행할 EventHandler를 추가해야합니다.
Aspx 디자인
<%@ 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