前面介绍的主要是如何在内容页中引用母版页,以及如何进行母版页和内容页的页面设计等技术,也就是如何进行页面外观设计的技术。但在实际应用中常常需要在内容页中访问母版页中控件的属性或响应母版页中控件的事件。例如,可能需要在母版页中的某命令按钮控件被单击时,将母版页某文本框中用户填写的文本信息显示到内容页的某个标签中等。
由于内容页被打开时会将母版页合并到自己的页面代码中来构成最终的页面代码,因此在内容页中访问母版页中的控件属性是完全可能的。
具体的实现方法是:首先使用系统Master类中提供的FindControl()方法,获取对母版页中控件的引用(相当于得到母版页控件的副本)。然后对该引用进行操作,读取或更改母版页控件的属性值。
FindControl()方法的语法格式如下。
例如,设内容页中有一个文本框控件TextBox1,母版页中有一个标签控件Label1。若希望页面打开时将标签中的信息显示到文本框后在标签中显示“12345”,可在内容页Page_Load事件中添加以下代码。
在母版页中通常包含用户登录、站内搜索等需要与用户交互操作的界面,这就需要能够在内容页中处理发生在母版页中的系统事件或用户事件。
例如,用户在包含于母版页中的搜索栏内填写了关键词,设置了搜索选项并单击了“搜索”按钮时,需要在内容页对用户的输入信息进行处理,并将程序执行结果(搜索结果)显示在内容页中。此时不仅需要从内容页读取母版页中控件的属性值,还需要在内容页中响应发生在母版页中的用户事件(单击按钮)。
在内容页中响应母版页中的事件,需要用到“委托”技术,也就是将母版页中发生的事件“委托”给内容页中编写的某个“方法”程序来处理。
EventHandler委托的语法格式如下。
例如,希望将命令按钮Button1的Click事件交给名为B1_Click的方法处理,可编写以下程序代码。
如果希望在内容页中使用委托技术处理发生在母版页中的事件,除了需要定义事件委托和编写处理事件的方法外,还需要使用FindControl()方法获取母版页中控件的实例。
【 演练3-4 】在内容页中响应母版页中事件的示例。设母版页中有一个文本框控件TextBox1和一个按钮控件Button1,内容页中有一个标签控件Label1。要求当用户单击母版页中的Button1时,将用户输入在母版页TextBox1中的信息显示到内容页的Label1中。
程序设计步骤如下。
1)新建一个ASP.NET空网站,向网站中添加一个母版页MasterPage.master,在设计视图中向母版页添加一个文本框控件TextBox1和一个命令按钮控件Button1。
2)向网站中添加一个引用母版页MasterPage.master的内容页Default.aspx,向内容页中添加一个标签控件Label1。
切换到内容页Default.aspx的代码窗口,编写程序代码如下。