一、如何在頁面中訪問在Site.Master中引用到的用戶控件。
這裏假設給定三個頁面:Site.Master、Default.aspx和WebUserControl.ascx。Site.Master是Default.aspx頁面中使用到的頁面模板,WebUserControl是Site.Master模板頁中使用的用戶自定義控件類。
問題:在Default.aspx.cs代碼中訪問到Site.Master中用到的WebUserCotrol實例。
解決辦法:
1、在Default.aspx頁面中增加下面的標籤說明:
<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>
2、在Default.aspx.cs中需要訪問到該用戶控件的地方使用下面的代碼:
WebUserControl uc = (WebUserControl)Master.FindControl("WebUserControl1");
if (uc != null)
{
//具體的操作代碼
}
注:WebUserControl1是Site.Master中使用的WebUserControl實例ID。
二、如何在頁面中控制在Site.Master中引用到的用戶控件。
問題:如前所述,我們已經可以訪問到模板頁中用到的用戶控件實例,那麼如何控制用戶控件內的組件呢,比如設置其中標籤(Label)組件的文本顯示,或當其中TreeView組件結點選擇變化時做些處理。
解決辦法:
1、在WebUserControl.ascx申明設置標籤組件文本顯示的屬性和設置TreeView組件SelectedNodeChanged的屬性。代碼如下:
public EventHandler onSelNode
{
set
{
TreeView1.SelectedNodeChanged += value;
}
}
public string Text
{
get
{
return Label1.Text;
}
set
{
Label1.Text = value;
}
}
注:Label1和TreeView1是WebUserControl用到的Label和TreeView組件ID。
2、在需要控制WebUserControl內組件的地方使用下面的代碼:
WebUserControl uc = (WebUserControl)Master.FindControl("WebUserControl1");
if (uc != null)
{
uc.Text = "";
uc.onSelNode = TreeView1_SelectedNodeChanged;
}
public void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
TreeView t = (TreeView)sender;
if (t != null)
{
//在這裏就可以訪問到TreeView的任何屬性了
}
}