Asp.net 2.0 爲用戶控件添加event

 使用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(
thisnull);
    }


}
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);
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章