使用user control的好处自不必说
但是作为一个控件虽然实际上其中可能包含很多控件(服务端控件)但是一旦在页面中注册使用它就表现为一个独立的控件也就是说在编辑阶段其包含的控件我们是访问不到的或者说不能对其包含的控件进行控制
这个时候就要通过为控件添加属性和事件来提供对外的接口使得我们可以间接的控制其子控件用属性来控制其子控件的状态而我们可以在外部访问并改变属性值从而达到间接控制子控件的目的当然如果子控件发生了什么事件我们要想知道就可以通过public event来获得
此Demo演示了user control中datalist发生了selectedindex事件而我们在page中想利用这个事件那么就可以这样做
usercontrol: ucascx
<%@ControlLanguage=C#AutoEventWireup=trueCodeFile=ucascxcsInherits=uc%>
<asp:DataListID=dlshowrunat=serverRepeatDirection=HorizontalOnSelectedIndexChanged=dlshow_SelectedIndexChanged>
<ItemTemplate>
<asp:LinkButtonID=linkbtnrunat=serverCommandName=Select
Text=<%#ContainerDataItem%>>
</asp:LinkButton>
</ItemTemplate>
</asp:DataList>CS:
usingSystemCollectionsGeneric;
publicpartialclassuc:SystemWebUIUserControl
{
publiceventEventHandlerTabClick;
privateintindex;
publicintIndex
{
get{returnindex;}
set{index=value;}
}
protectedvoidPage_Load(objectsenderEventArgse)
{
List<string>list=newList<string>();
listAdd(tab);
listAdd(tab);
listAdd(tab);
listAdd(tab);
dlshowDataSource=list;
dlshowDataBind();
dlshowSelectedIndex=;
}
protectedvoiddlshow_SelectedIndexChanged(objectsenderEventArgse)
{
Labellbl=thisParentFindControl(lblshow)asLabel;
lblText=AccessParentPageControl;
index=dlshowSelectedIndex;
TabClick(thisnull);
}
}page:showucaspx:
<%@PageLanguage=C#AutoEventWireup=trueCodeFile=ShowUcaspxcsInherits=ShowUc%>
<%@RegisterTagPrefix=myTagName=tabSrc=~/ucascx%>
<!DOCTYPEhtmlPUBLIC//WC//DTDXHTMLTransitional//ENtransitionaldtd>
<htmlxmlns=>
<headrunat=server>
<title>未命名页面</title>
</head>
<body>
<formid=formrunat=server>
<div>
<my:tabID=Mytabrunat=serverOnTabClick=Mytab_TabClick/>
<br/>
<asp:LabelID=lblshowrunat=serverText=Label></asp:Label>
</div>
</form>
</body>
</html>
CS:
publicpartialclassShowUc:SystemWebUIPage
{
protectedvoidPage_Load(objectsenderEventArgse)
{
}
protectedvoidMytab_TabClick(objectsenderEventArgse)
{
intindex=MytabIndex;
ResponseWrite(Youselectedtheindex+index);
}
}