欢迎进入.NET社区论坛,与200万技术人员互动交流 >>进入 使用user control的好处自不必说。
但是作为一个控件,虽然实际上其中可能包含很多控件(asp.net服务端控件),但是一旦在页面中注册使用,它就表现为一个独立的控件,也就是说在编辑阶段,其包含的控件我们是访问不到的,或者说不能对其包含的控件进行控制。
这个时候,就要通过为控件添加属性和事件来提供对外的接口,使得我们可以间接的控制其“子控件”:用属性来控制其子控件的状态,而我们可以在外部访问并改变属性值,从而达到间接控制子控件的目的;当然如果子控件发生了什么事件,我们要想知道,就可以通过public event来获得。
此Demo演示了,user control中datalist发生了selectedindex事件,而我们在page中想利用这个事件,那么就可以这样做:
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);

}

}