使用user control的好處自不必說
但是作為一個控件
雖然實際上其中可能包含很多控件(服務端控件)
但是一旦在頁面中注冊使用
它就表現為一個獨立的控件
也就是說在編輯階段
其包含的控件我們是訪問不到的
或者說不能對其包含的控件進行控制
這個時候
就要通過為控件添加屬性和事件來提供對外的接口
使得我們可以間接的控制其
子控件
用屬性來控制其子控件的狀態
而我們可以在外部訪問並改變屬性值
從而達到間接控制子控件的目的
當然如果子控件發生了什麼事件
我們要想知道
就可以通過public event來獲得
此Demo演示了
user control中datalist發生了selectedindex事件
而我們在page中想利用這個事件
那麼就可以這樣做
usercontrol: uc
ascx
<%@ Control Language=
C#
AutoEventWireup=
true
CodeFile=
uc
ascx
cs
Inherits=
uc
%>
<asp:DataList ID=
dlshow
runat=
server
RepeatDirection =
Horizontal
OnSelectedIndexChanged=
dlshow_SelectedIndexChanged
>
<ItemTemplate >
<asp:LinkButton ID=
linkbtn
runat=
server
CommandName=
Select
Text=
<%#Container
DataItem %>
>
</asp:LinkButton>
</ItemTemplate>
</asp:DataList>CS:
using System
Collections
Generic;
public partial class uc
: System
Web
UI
UserControl
{
public event EventHandler TabClick;
private int index;
public int Index
{
get { return index; }
set { index = value; }
}
protected void Page_Load(object sender
EventArgs e)
{
List<string> list = new List<string>();
list
Add(
tab
);
list
Add(
tab
);
list
Add(
tab
);
list
Add(
tab
);
dlshow
DataSource = list;
dlshow
DataBind();
dlshow
SelectedIndex =
;
}
protected void dlshow_SelectedIndexChanged(object sender
EventArgs e)
{
Label lbl=this
Parent
FindControl(
lblshow
) as Label;
lbl
Text =
Access Parent Page Control
;
index = dlshow
SelectedIndex;
TabClick(this
null);
}
}page:showuc
aspx:
<%@ Page Language=
C#
AutoEventWireup=
true
CodeFile=
ShowUc
aspx
cs
Inherits=
ShowUc
%>
<%@ Register TagPrefix =
my
TagName =
tab
Src =
~/uc
ascx
%>
<!DOCTYPE html PUBLIC
//W
C//DTD XHTML
Transitional//EN
transitional
dtd
>
<html xmlns=
>
<head runat=
server
>
<title>未命名頁面</title>
</head>
<body>
<form id=
form
runat=
server
>
<div>
<my:tab ID=
Mytab
runat=
server
OnTabClick=
Mytab_TabClick
/>
<br />
<asp:Label ID=
lblshow
runat=
server
Text=
Label
></asp:Label>
</div>
</form>
</body>
</html>
CS:
public partial class ShowUc : System
Web
UI
Page
{
protected void Page_Load(object sender
EventArgs e)
{
}
protected void Mytab_TabClick(object sender
EventArgs e)
{
int index = Mytab
Index;
Response
Write(
You selected the index
+index);
}
}
From:http://tw.wingwit.com/Article/program/net/201311/12455.html