原文地址:http://www.cnblogs.com/AXzhz/archive/2007/11/02/947011.html
【引】
项目中用了许多UC(User Control),其中有些主页需要知道UC做了某个Event后,进行联动动作.
例如:如果UC的Button控件被Click,那么主页(Page)要做一个显示不同信息的动作.
因为主页(Page)不能直接知道UC里Button被Click的事件,这个时候就用到了事件代理.
【步骤】
①为UC添加事件代理
public
event
EventHandler AX;
②在appropriate触发条件处添加事件
if
(AX
!=
null
)
{
AX(
this
, e);
//
Or use the following sentence code.
//
AX(this, new EventArgs());
}
③添加主页(Page)要执行的事件
protected void Event_AX(object sender, EventArgs e)
{
Response.Write("Event has occur!
<
br
/>
");
}
④在主页(Page)上添加事件代理,从而执行主页上的Function
方法1:*.CS端
UC_AXzhz.AX
+=
new
EventHandler(Event_AX);
方法2:*.aspx端【注:使用此方法,Event_AX必须为protected/interanl/public类型,不能为private类型】
<
AX:UC_AX
ID
="UC_AXzhz"
OnAX
="Event_AX"
runat
="server"
/>
【完整代码】
UC前端:
<%
@ Control Language="C#" AutoEventWireup="true" CodeFile="UC_AX.ascx.cs" Inherits="UC_AX"
%>
<
asp:Button
ID
="btnClick"
runat
="server"
OnClick
="btnClick_Click"
Style
="z-index: 100;
left: 156px; position: absolute; top: 113px"
Text
="ClickMe"
Height
="25px"
Width
="74px"
/>
UC后台:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public
partial
class
UC_AX : System.Web.UI.UserControl
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
//①添加事件代理
public event EventHandler AX;
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
protected void Page_Load(object sender, EventArgs e)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
}
protected void btnClick_Click(object sender, EventArgs e)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//②如果点击了Button, Fire the代理事件
//可以通过多种条件fire事件代理.
//Must add this condition, Otherwise,if AX equal null
//Will throw a exception
if (AX != null)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
AX(this, e);
//Or use the following sentence code.
//AX(this, new EventArgs());
}
}
}
Page前端:
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default_AX.aspx.cs" Inherits="Default_AX"
%>
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
<%
@ Register Src="UC_AX.ascx" TagName="UC_AX" TagPrefix="AX"
%>
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head
runat
="server"
>
<
title
>
Untitled Page
</
title
>
</
head
>
<
body
>
<
form
id
="form1"
runat
="server"
>
<
div
>
<!--
//④Another way:为代理添加需要执行的事件
-->
<
AX:UC_AX
ID
="UC_AXzhz"
OnAX
="Event_AX"
runat
="server"
/>
</
div
>
</
form
>
</
body
>
</
html
>
Page后台:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
![None.gif](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public
partial
class
Default_AX : System.Web.UI.Page
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
protected void Page_Load(object sender, EventArgs e)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//③为代理添加需要执行的事件
UC_AXzhz.AX += new EventHandler(Event_AX);
}
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//⑤当UC的Button被Click后,主页上要执行的动作
protected void Event_AX(object sender, EventArgs e)
![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
Response.Write("Event has occur!<br/>");
}
![InBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}