容页之间的控件对应关系,才能够准确、高效地创建 Web应用程序。
下面重点对母版页的运行过程进行说明。
当客户端浏览器向服务器发出请求,要求浏览页面时,ASP.NET 执行引擎将执行内容页和母版页的代码,并将最终结果发送给客户端浏览器。
母版页和内容页的运行过程可以概括为以下 5 个步骤。
(1)用户通过键入内容页的 URL 来请求某页。
(2)获取内容页后,读取@Pape 指令。
如果该指令引用一个母版页,则也读取该母版页。
如果是第一次请求这两个页,则两个页都要进行编译。
(3)母版页合并到内容页的控件树中。
(4)各个 Content 控件的内容合并到母版页中相应的 ContentPlaceHolder 控件中。
(5)呈现得到结果页。
整个过程具有很强的逻辑性,并且母版页和内容页配合的非常巧妙。
从用户角度来看,合并后的母版页和内容页是一个完整的页面,并且其 URL 访问路径与内容页的路径相同。
从开发人员角度来看,控件的巧妙应用和配合,是实现的关键。
注意,在运行时,母版页成为了内容页的一部分。
实际上,母版页与用户控件的作用方式大致相同,即作为内容页的一个子级,并作为该页中的一个容器。
然而,当前母版页是所有呈现到浏览器中的服务器控件的容器。
此时,回想过去使用的#include、用户控件等实现方法,则可以更加深入理解母版页功能。
11.1.3 母版页和内容页事件顺序 通常情况下,母版页和内容页中的事件顺序对于页面开发人员并不重要。
但是,如果所创建的事件处理程序取决于某些事件的可用性, 那么了解母版页和内容页中的事件顺序很有帮助。
本节将对母版页和内容页的事件顺序进行简要说明,以便加深读者对于母版页和内容页的理解。
当访问结果页时,实际访问的是内容页和母版页。
作为有着密切关系的两个页面,二者都要执行各自的初始化和加载等事件。
具体过程如图 11-2 所示。
图 11-2 1.初始化母版页 2.初始化内容页 3.初始化 4.初始化 控件树 控件树 母版页 内容页 5.加载内容页 6.加载母版页 7.加载母版页 8.加载内容页 控件树 控件树 这 加载母版页和内容页共需要经过 8 个过程。
8 个过程显示初始化和加载母版页及内容页是一个相互交叠的过程。
基本过程是,初始化母版页和内容页控件树,然后,初始化母版页和内容页页面,接着,加载母版页和内容页,最后,加载母版页和内容页控件树。
以上 8个过程对应着 11 个具体事件。
这些事件如下所示。
1.母版页中控件 Init 事件;2.内容页中 Content 控件 Init 事件;3.母版页 Init 事件;4.内容页 Init 事件;5.内容页 Load 事件;6.母版页 Load 事件;7.内容页中 Content 控件 Load 事件;8.内容页 PreRender 事件;9.母版页 PreRender 事件;10.母版页控件 PreRender 事件;11.内容页中 Content 控件 PreRender 事件。
实际上,8 个过程或者是 11 个事件都用于说明母版页和内容页中的具体事件顺序。
内容页和母版页中会引发相同的事件。
例如,两者都引发 Init、Load 和 PreRender 事件。
引发事件的一般规律是,初始化 Init 事件从最里面的控件(母版页)向最外面的控件(Content控件及内容页)引发,所有其他事件则从最外面的控件向最里面的控件引发。
需要牢记,母版页会合并到内容页中,并被视为内容页中的一个控件,这一点十分有用。
在创建应用程序中,必须注意以上事件顺序。
例如,当在内容页中访问母版页的属性或者服务器控件时,如果按照过去的处理思路,可能会在内容页的 Page-Load 事件处理程序中加以实现。
由前文可知,在母版页 Load 事件引发之前,内容页 Load 事件已经引发,那么过去的思路显然是不正确的。
如何才能在内容页中访问母版页包含对象呢?可参考“5.5 访问母版页控件和属性”一节中介绍的实现方法。
11.4.4 母版页的优点 使用母版页功能,可以为 ASP.NET 应用程序页面创建一个通用的外观。
开发人员可以利用母版页功能创建一个单页布局,然后将其应用到多个内容页中。
总结起来,母版页具有以下 4 个优点。
1.有利于站点修改和维护,降低开发人员的工作强度 由于公共内容被集中于母版页中,因此,只要修改母版页,就可以快速完成站点修改和 维护任务,这在很大程度上提高了工作效率。
2.提供高效的内容整合能力 在母版页中,允许添加文字、控件等 Web 元素,同时,也可以为这些 Web 元素添加相 应事件处理程序等。
例如,只需要在母版页中添加一个服务器控件及其事件处理程序, 那么站点内所有引用该母版页的网页,都将获得同样的应用效果。
3.有利于实现页面布局 母版页中的 ContentPlaceHolder 控作起到了占位的作用,这在很大程度上,有利于进行 页面布局等工作。
4.提供一种便于利用的对象模型 由内容页和母版页组成的对象模型,能够为应用程序提供一种高效、易用的实现方式, 并且这种对象模型的执行效率较以前的处理方式有了很大提高。
11.2 创建母版页 母版页中包含的是页面公共部分,即网页模板。
使用 Visual Studio 2005 创建一个普通Web 站点,然后,在站点根目录下创建一个名为 MasterPage.master 的母版页。
由于这是一 .个添加新文件的过程,因此,单击“网站”命令菜单中的“添加新项.”选项,可以打开如图 11-3 所示的窗口。
图 11-3 由于创建的是母版页,因此,需要选择母版页图标,并且设置文件名为MasterPage.master。
需要注意的是,该窗口中还有一个复选框项“将代码放在单独的文件中” 。
默认情况下,该复选框处于选中状态。
表示 Visual Studio 2005 将会为 MasterPage.master 文件应用代码隐藏模型,即在创建 MasterPage.master 文件的基础上,自动创建一个与该文件相关的 MasterPape.masteres.cs 文件。
如果不选中该项,那么只会创建一个 Mastermsge.master文件而已。
建议读者选取该项。
在创建 MasterPnge.master 文件之后,接着就可以开始编辑该文件了。
使用 Visual Studo 2005 可以对母版页进行编辑,并且它完全支持“所见即所得”功能。
无论是在代码模式下,还是设计模式下,使用 Visual Studo 2005 编辑母版页的方法,与编辑普通.aspx 文件是相同的。
图中两个矩形框表示 ContentPlaceHolder 控件。
开发人员可以直接在矩形框中添加内容,所设置内容的代码将包含在 ConentPlaceHolder 控件声明代码中。
需要注意的是,这种方法是不规范的,因此,不推荐使用这种做法。
11.3 创建内容页 在创建一个完整的母版页之后,接下来必然要创建内容页。
从用户访问的角度来讲,内容页与最终结果页的访问路径相同,这好像表明二者是同一文件,实际不然。
结果页是一个虚拟的页面,没有实际代码,其代码内容是在运行时状态下母版页和内容页合并的结果。
在开始介绍内容页之前,还有两个概念需要强调:一是内容页中所有内容必须包含在 Content控件中;二是内容页必须绑定母版页。
虽然内容页的扩展名与普通 ASPNET 页面相同,但是,其代码结构有着很大差别。
在创建内容页的过程中,必须时刻牢记以上两个重要概念。
与创建母版页差不多,创建内容页的过程比较简单。
单击“网站”命令菜单中的“添加 ,或者在解决方案管理器中右键单击项目,在下拉菜单中选择“添加新项…”新项…” ,就可以打开如图 11-3 所示的窗口。
如图 11-3 所示,要求选择新建文件类型。
由于内容页与普通.aspx 页面的扩展名相同,因此,选择的是 Web 窗体图标。
接着,还需要设置文件名 Index..aspx。
设置完成之后,不可直接单击“添加”按钮。
因为,内容页必须绑定母版页,所以还需要对
上一篇:
【精品】8多线程
下一篇:
电咖汽车入选2018独角兽企业榜百强 发布“天际”品牌将推高估值