使用user control的好處自不必說。但是作為一個(gè)控件,雖然實(shí)際上其中可能包含很多控件(asp.net服務(wù)端控件),但是一旦在頁面中注冊使用,它就表現(xiàn)為一個(gè)獨(dú)立的控件,也就是說在編輯階段,其包含的控件我們是訪問不到的,或者說不能對(duì)其包含的控件進(jìn)行控制。
這個(gè)時(shí)候,就要通過為控件添加屬性和事件來提供對(duì)外的接口,使得我們可以間接的控制其“子控件”:用屬性來控制其子控件的狀態(tài),而我們可以在外部訪問并 改變屬性值,從而達(dá)到間接控制子控件的目的;當(dāng)然如果子控件發(fā)生了什么事件,我們要想知道,就可以通過public event來獲得。
此Demo演示了,user control中datalist發(fā)生了selectedindex事件,而我們在page中想利用這個(gè)事件,那么就可以這樣做:
usercontrol: uc1.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="uc1.ascx.cs" Inherits="uc1" %>
<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 uc1 : 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("tab1");
list.Add("tab2");
list.Add("tab3");
list.Add("tab4");
dlshow.DataSource = list;
dlshow.DataBind();
dlshow.SelectedIndex = 0;
}
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 ="~/uc1.ascx" %>
<!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>
<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);
}
}
標(biāo)簽:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:CSDN