![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=1739232655-lRFqNBmWkuO6bjzrg6wBayjaFB3VoH7E-0-b0e97e8a980c0457df4b41f06464e002)
视频讲解
对在内容页中引用母版页中的属性、方法和控件是有一定限制的。对于属性和方法的规则是:如果它们在母版页上被声明为公共成员,则可以引用它们,这包括公共属性和公共方法。在引用母版页上的控件时,没有只能引用公共成员的这种限制。
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=1739232655-C41T4VTdV1TNrSj19LVa3jtbhZHKpWmE-0-9fb0c278f22768bccb2d2bdb2c319299)
图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=1739232655-pMIitwy4XjA4uFe3EffCOjo0vxGmlNi5-0-79a1b361342e2d9dfaf32f28689de1ea)
(4)在Default.aspx内容页的Page_LoadComplete事件中,使内容页的Label控件显示母版页中的Label控件值的代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P136_87063.jpg?sign=1739232655-cbDd4nkivi7YlloS6rVVFxNbJkBxpS1V-0-48890582ff96284e652c3c78e24b0109)
注意
由于在母版页的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=1739232655-vBhDyTUSGZ1MkFkTpIjpsp7nNkDENHU9-0-b49a2c8d81db970b8aeed9210c1898c7)
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_24057.jpg?sign=1739232655-yTnR4CMUhDuCgaYkd2aWX8dfHhf2XD5h-0-9d2ead43f82e00b60af48979ea58f619)
图5.8 访问母版页上的属性
并且通过<%= MValue %>显示在母版面中,代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_87069.jpg?sign=1739232655-DDgFYanXVAnsVgxVRJBy9AtcKmo2K1Oz-0-7611dcbd6e59d38450651cfa71128e72)
(3)在内容页代码头的设置中增加了<%@MasterType%>,并在其中设置了VirtualPath属性,用于设置被强类型化的母版页的URL地址。代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P137_87070.jpg?sign=1739232655-IwhfJ4uIrP91OCKEtLIv43V6neomgwd9-0-8c2d91f78d9e76f3c2b2b3fa994bd3bd)
(4)在内容页的Page_Load事件下,通过Master对象引用母版页中的公共属性,并将Welcome字样赋给母版页中的公共属性。代码如下:
![](https://epubservercos.yuewen.com/745A13/15477657604593106/epubprivate/OEBPS/Images/Figure-P138_87073.jpg?sign=1739232655-jMhsZ4wTGe4nrbYSyUBAn88QIV4m1vbF-0-b8eb485c128706f466b8f83a19929eeb)
说明
以上代码在内容页中的赋值,将影响母版页中公共属性的值。