Master页是提供模版的一种简单方式,该模板可由应用程序中的任意多个Asp.Net页使用,在运行的时候,Asp.Net引擎会把Master页和Content页的相关元素合并到一个页,并显示给终端.
在Content页里如何操作Master页的控件呢?
先看看在处理Master页和Content页时可以使用的事件,及终端用户请求一个Content页时,相关事件的触发顺序:
Master页子控件的初始化: 先初始化Master页包含的所有服务器控件
Content页面子控件的初始化: 先初始化Content页包含的所有服务器控件
Content页的初始化: 初始化Content页
Content页的加载: 加载Content页,这跟在Page_LoadComplete事件后的Page_Load事件
Master页的加载: 加载Master页,这跟在Page_LoadComplete事件后的Page_Load事件
Master页子控件加载: 把Master页中的服务器控件加载到页中
Content页子控件的加载: 把Master页中的服务器控件加载到页中
看过上面的事件触发顺序,可以得知Master页的控件获取需要在Page_LoadComplete里
假使Master页里有一Lable,ID为Label1,要在Content页中访问,那么可以这样:
在Content页里如何操作Master页的控件呢?
先看看在处理Master页和Content页时可以使用的事件,及终端用户请求一个Content页时,相关事件的触发顺序:
Master页子控件的初始化: 先初始化Master页包含的所有服务器控件
Content页面子控件的初始化: 先初始化Content页包含的所有服务器控件
Content页的初始化: 初始化Content页
Content页的加载: 加载Content页,这跟在Page_LoadComplete事件后的Page_Load事件
Master页的加载: 加载Master页,这跟在Page_LoadComplete事件后的Page_Load事件
Master页子控件加载: 把Master页中的服务器控件加载到页中
Content页子控件的加载: 把Master页中的服务器控件加载到页中
看过上面的事件触发顺序,可以得知Master页的控件获取需要在Page_LoadComplete里
假使Master页里有一Lable,ID为Label1,要在Content页中访问,那么可以这样:
protected void Page_LoadComplete ( object sender , EventArgs e )
{
string masterLabel = ( Master.FindControl( "Lable1" ) as Label ).Text;
}
另外我觉得比较好的方法是把Master页里的控件作为公共属性公开{
string masterLabel = ( Master.FindControl( "Lable1" ) as Label ).Text;
}
public Label masterLabel1
{
get { return Label1; }
set { Label1 = value; }
}
在Content页里操作该公共属性就OK了{
get { return Label1; }
set { Label1 = value; }
}
Master.masterLabel1.Text = "<a href='http://doll-net.cnblogs.com'>空空儿</a>";