一、如何在页面中访问在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的任何属性了
}
}