![ASP.NET从入门到精通(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/771/27111771/b_27111771.jpg)
5.5 访问母版页的控件和属性
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P135_23870.jpg?sign=1738888892-Lngrgs2I6rKHMGnV8droDs4r2NvvQXN0-0-67695a830d14a913fca86998ee322583)
视频讲解
对在内容页中引用母版页中的属性、方法和控件是有一定限制的。对于属性和方法的规则是:如果它们在母版页上被声明为公共成员,则可以引用它们,这包括公共属性和公共方法。在引用母版页上的控件时,没有只能引用公共成员的这种限制。
5.5.1 使用Master.FindControl()方法访问母版页上的控件
在内容页中,Page对象具有一个公共属性Master,该属性能够实现对相关母版页基类MasterPage的引用。母版页中的MasterPage相当于普通ASP.NET页面中的Page对象,因此,可以使用MasterPage对象实现对母版页中各个子对象的访问,但由于母版页中的控件是受保护的,不能直接访问,那么就必须使用MasterPage对象的FindControl方法实现。
【例5.2】访问母版页上的控件。(示例位置:mr\TM\05\02)
下面的示例主要通过使用FindControl方法,获取母版页中用于显示系统时间的Label控件。执行程序,示例运行结果如图5.7所示。
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P135_87061.jpg?sign=1738888892-etZj9lUcogXeHFhheFTcemfbumetidBi-0-2549ed3ad7de57b49312281631d31752)
图5.7 嵌套母版页
程序实现的主要步骤如下。
(1)新建一个网站,首先添加一个母版页,默认名称为MasterPage.master,再添加一个Web窗体,命名为Default.aspx,作为母版页的内容页。
(2)分别在母版页和内容页上添加一个Label控件。母版页的Label控件的ID属性为labMaster,用来显示系统日期。内容页的Label控件的ID属性为labContent,用来显示母版页中的Label控件值。
(3)在MasterPage.master母版页的Page_Load事件中,使母版页的Label控件显示当前系统日期的代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87062.jpg?sign=1738888892-Nmn6UFewl0T1YuFuCjPJ0QHyrMbHA9Hn-0-10d73031946df89aa1165b4840b112d6)
(4)在Default.aspx内容页的Page_LoadComplete事件中,使内容页的Label控件显示母版页中的Label控件值的代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87063.jpg?sign=1738888892-O8Gx6L6cye51vc4xKLkvaz5U2mpg49Ah-0-7d8decbf8f71786187c2a97d69743460)
注意
由于在母版页的Page_Load事件引发之前,内容页Page_Load事件已经引发,所以,此时从内容页访问母版页中的控件比较困难。所以,本示例使用ASP.NET 2.0(及以上版本)新增的Page_LoadComplete事件,利用FindControl()方法来获取母版页的控件,其中Page_LoadComplete事件是在生命周期内和网页加载结束时触发。当然还可以在Label控件的PreRender事件下完成此功能。
5.5.2 引用@MasterType指令访问母版页上的属性
引用母版页中的属性和方法,需要在内容页中使用MasterType指令,将内容页的Master属性强类型化,即通过MasterType指令创建与内容页相关的母版页的强类型引用。另外,在设置MasterType指令时,必须设置VirtualPath属性以便指定与内容页相关的母版页存储地址。
【例5.3】访问母版页上的属性。(示例位置:mr\TM\05\03)
下面的示例主要通过使用MasterType指令引用母版页的公共属性,并将Welcome字样赋给母版页的公共属性。执行程序,示例运行结果如图5.8所示。
程序实现的主要步骤如下。
(1)程序开发步骤参见例5.2。
(2)在母版页中定义了一个String类型的公共属性MValue,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87066.jpg?sign=1738888892-LIKj95LIXycwuvQpJyf3Y618Mvfm4LKx-0-bf698c17088ff0e248eaef990644672e)
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_24057.jpg?sign=1738888892-4jQajHg3o8c8cSvZKEZVWVoGV8a9YUVy-0-4062c9fb27676852c68d43d4d24483ec)
图5.8 访问母版页上的属性
并且通过<%= MValue %>显示在母版面中,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_87069.jpg?sign=1738888892-NeBLoT1N24E866yGJwS0nxpNsw6zVzU3-0-196e46f79c95351a6fd64c65c56728ea)
(3)在内容页代码头的设置中增加了<%@MasterType%>,并在其中设置了VirtualPath属性,用于设置被强类型化的母版页的URL地址。代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_87070.jpg?sign=1738888892-NCTRAqMrTNZcr12vTokia528RYv9ooqN-0-433edde65e2bd4370804933c9e4b339e)
(4)在内容页的Page_Load事件下,通过Master对象引用母版页中的公共属性,并将Welcome字样赋给母版页中的公共属性。代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P138_87073.jpg?sign=1738888892-L5gNmbEKykLvCqALcZjGSl4mAdxLBMa2-0-533b69fa8101e55d1c822c7c61b71f6a)
说明
以上代码在内容页中的赋值,将影响母版页中公共属性的值。