.net中使用母版页的优点

母版页提供了开发人员已通过传统方式创建的功能,这些传统方式包括重复复制现有代码、文本和控件元素;使用框架集;对通用元素使用包含文件;使用 ASP.NET 用户控件等。母版页具有下面的优点:

  • 使用母版页可以集中处理页的通用功能,以便可以只在一个位置上进行更新。

  • 使用母版页可以方便地创建一组控件和代码,并将结果应用于一组页。例如,可以在母版页上使用控件来创建一个应用于所有页的菜单。

  • 通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终页的布局。

  • 版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页。

    在运行时,母版页是按照下面的步骤处理的:

    用户通过键入内容页的 URL 来请求某页。

  1. 获取该页后,读取 @ Page 指令。如果该指令引用一个母版页,则也读取该母版页。如果这是第一次请求这两个页,则两个页都要进行编译。

  2. 包含更新的内容的母版页合并到内容页的控件树中。

  3. 各个 Content 控件的内容合并到母版页中相应的 ContentPlaceHolder 控件中。

  4. 浏览器中呈现得到的合并页。

下面的关系图对此过程进行了阐释。

运行时的母版页

从用户的角度来看,合并的主控和内容页是一个单独而离散的页。该页的 URL 是内容页的 URL。

从编程的角度来看,这两个页用作其各自控件的独立容器。内容页用作母版页的容器。但是,在内容页中可以从代码中引用公共母版页成员(如下一节中所述)。

注意,母版页成为了内容页的一部分。实际上,母版页与用户控件的作用方式大致相同 -- 作为内容页的一个子级并作为该页中的一个容器。但是在这种情况下,母版页是所有呈现到浏览器中的服务器控件的容器。合并的主控和内容页的控件树看起来类似于下面这样:

Page
Master Page
(Master page markup and controls)
ContentPlaceHolder
Content page markup and server controls
(Master page markup and controls)
ContentPlaceHolder
Content page markup and server controls
(Master page markup and controls)

此关系图是简化的;如果内容页不具有相应的 Content 控件,母版页也可能在 ContentPlaceHolder 控件中具有标记和控件。

一般说来,此结构对如何构造页或编写页的程序无任何影响。但是在某些情况下,如果在母版页上设置一个页范围的属性,则该属性可能会影响内容页的行为,这是因为母版页是页上控件的最近的父级。例如,如果在内容页上将 EnableViewState 属性设置为 true,而在母版页中将相同的属性设置为 false,实际上会禁用视图状态,因为母版页上的设置具有优先权。

当请求某个内容页时,其内容与母版页合并,并且该页在内容页的上下文中运行。例如,如果获取 HttpRequest 对象的 CurrentExecutionFilePath 属性,则无论是在内容页代码还是母版页代码中,路径都表示内容页的位置。

母版页和内容页不必位于同一文件夹中。只要内容页的 @ Page 指令中的 MasterPageFile 特性解析为一个
.master 页,ASP.NET 就可以将内容页和母版页合并为一个单独的已呈现的页。

引用外部资源

内容页和母版页都可以包含引用外部资源的控件和元素。例如,两者都可以包含引用图像文件的图像控件,或包含引用其他页的定位点。

合并的内容和母版页的上下文是内容页的上下文。这会影响在定位点上指定资源(如图像文件和目标页)的 URL 的方式。

服务器控件

在母版页上的服务器控件中,ASP.NET 动态修改引用外部资源的属性的 URL。例如,可以将一个 Image 控件放置于一个母版页上并将其 ImageUrl 属性设置为相对于母版页。在运行时,ASP.NET
会修改 URL 以便其在内容页的上下文中正确解析。

ASP.NET 会在下面的情况下修改 URL:

  • URL 为某个 ASP.NET 服务器控件的属性。

  • 该属性在该控件中内部标记为一个 URL。(该属性用特性 UrlPropertyAttribute 来标记。)在实际情况中,采用这种方式标记通常用于引用外部资源的
    ASP.NET 服务器控件属性。

其他元素

ASP.NET 无法修改不是服务器控件的元素上的 URL。例如,如果在母版页上使用一个 img 元素并将其 src 特性设置为一个 URL,则 ASP.NET 不会修改该
URL。在这种情况下,URL 会在内容页的上下文中进行解析并创建相应的 URL。

一般说来,在母版页上使用元素时,建议您使用服务器控件,即使是对不需要服务器代码的元素也是如此。例如,不使用 img 元素,而使用 Image 服务器控件。这样,ASP.NET
就可以正确解析 URL,而且您可以避免移动母版页或内容页时可能引发的维护问题。

有关指定 ASP.NET 服务器控件的路径的更多信息,请参见 ASP.NET Web 项目路径

不能直接将 ASP.NET 主题应用于母版页。如果向 @ Master 指令添加一个主题特性,则页在运行时会引发错误。

但是,主题在下面这些情况中会应用于母版页:

  • 如果主题是在内容页中定义的。母版页在内容页的上下文中解析,因此内容页的主题也会应用于母版页。

  • 如果通过在 pages 元素(ASP.NET 设置架构) 元素中包含主题定义来将整个站点配置为使用主题。

页级   可以在每个内容页中使用页指令来将内容页绑定到一个母版页,如下面的代码示例中所示。

  • <%@ Page Language="VB" MasterPageFile="MySite.Master" %>
    
    <%@ Page Language="C#" MasterPageFile="MySite.Master" %>
    
  • 应用程序级   通过在应用程序的配置文件 (Web.config) 的 pages 元素中进行设置,可以指定应用程序中的所有 ASP.NET 页(.aspx 文件)都自动绑定到一个母版页。该元素可能看起来类似于下面这样。

    <pages masterPageFile="MySite.Master" />
    

    如果使用此策略,则应用程序中的所有具有 Content 控件的 ASP.NET 页都与指定的母版页合并。(如果某个
    ASP.NET 页不包含 Content 控件,则不应用该母版页。)

  • 文件夹级   此策略类似于应用程序级的绑定,不同的是只需在一个文件夹中的一个 Web.config 文件中进行设置。然后母版页绑定会应用于该文件夹中的 ASP.NE

net中使用母版页的更多相关文章

  1. Office 365 - SharePoint 2013 Online 中创建母版页

    1.登陆SharePoint Online站点,点击右上角的设置按钮,如下图: 2.点击进入网站设置,到下面两个地方开启SharePoint Server 发布基础架构: 网站集管理 – 网站集功能 ...

  2. WebForm中搭配母版页和用户控件页时候的事件加载顺序

    在生产环境中,一个内容页(aspx)可能会包含数个用户控件(ascx),而每个控件可能都会涉及到数据库访问. 如果在内容页.母版页.控件页中各自使用自己的数据库访问方法,会造成很大的运行成本. 这样的 ...

  3. ASP.NET中的母版页

    添加一个"母版页",使用<asp:ContentPlaceHolder>挖坑,新建的母版页已经自动设置了两个ContentPlaceHolder创建使用母版页的具体页面 ...

  4. C#-WebForm-★ASP.NET中的母版页★

    何为母版页,顾名思义母版就是模版,就像在PPT里面的板式或主题一样,大框架已经有了,我们的任务就是向里面添加具体的内容.这样我们制作的所有幻灯片的外观大体都是一样的. 在ASP.NET中母版页有两种作 ...

  5. ASP.NET内容页中访问母版页中的对象

    在ASP.NET2.0开始,提供了母版页的功能.母版页由一个母版页和多个内容页构成.母版页的主要功能是为ASP.NET应用程序中的页面创建相同的布局和界面风格.母版页的使用与普通页面类似,可以在其中放 ...

  6. .net中的母版页中使用FindControl的使用

    前几天,遇到一个字段比较多的用户填写的页面(数据库表中就将近100个字段),怎么讲这些input的标签的值,保存数据库了?(使用的是母版页下面的aspx,不包括前段获取input的值,传给后台) 作为 ...

  7. asp.net中套用母版页之后的findcontrol

    套用模板页之后,如果要在内容页中查找某个控件,需要先找到模板页中的ContentPlaceHolder,在通过ContentPlaceHolder查找代码,如下: LinkButton btn = t ...

  8. ASP.NET中的母版页机制

    项目中用到了母版页,由于好长时间没用了,不太熟悉起原理,在网上找了一下: http://www.cnblogs.com/_zjl/archive/2011/06/12/2078992.html 有时间 ...

  9. 041. asp.net中内容页访问母版页中的控件

    母版页运行机制: 用户通过输入内容也的URL来请求某个页面, 获取该页面后, 读取@Page指令, 如果该指令引用了一个母版页, 则也读取该母版页, 如果也是第一次请求这两个页面, 则母版页和被请求的 ...

随机推荐

  1. div层遮盖flash(兼容浏览器)

    今天测试div层和flash的交互,发现div层总是被flash层遮盖,在百度上找了一会,说是加个<param name="wmode" value="transp ...

  2. ASP.NET MVC 表单的几种提交方式

    下面是总结一下在ASP.NET MVC中表单的几种提交方式. 1.Ajax提交表单 需要引用 <script type="text/javascript" src=" ...

  3. yum最常用的命令

    yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系.在建立好yum服务器后,yum客户端可以通过 http.ftp方式获得软件包,并使用方便的命令直接管理. ...

  4. 通过百度地图API定位--第三方开源--百度地图(一)

    1.把百度地图定位API(下载地址:http://lbsyun.baidu.com/sdk/download?selected=location)里面的libs复制到自己的项目libs里面 2.进行相 ...

  5. CLR via C# 计算限制的异步操作读书笔记

    1. 使用线程池搪行简单的计算限制操作 ThreadPool.QueueUserWorkItem(WaitCallback callback) 2.CLR默认情况下自动使初始线程的执行上下文流向辅助线 ...

  6. TDirectory.CreateDirectory 完整、严谨的创建一个目录

    描述:创建一个目录,不包含多级目录(多级目录使用System.SysUtils.ForceDirectories,Vcl.FileCtrl.ForceDirectories已过时) procedure ...

  7. openwrt无线中继教程

    1.设置自己路由lan口的IP地址,网段不能跟上级路由的一样. 2.在无线标签下点击"扫描网络". 3.在新出现的界面中,会列出你附近的无线网络.点击你需要中继的网络右边的&quo ...

  8. 一个简单的脚本让你的ubuntu14.04记忆屏幕亮度

    小弟献丑,发个没技术含量的.本人电脑是联想y400,无论是安装32位的ubuntu还是64位的ubuntu,无论是13.04还是现在的 14.04开发者版本,都无法让我的小y实现记忆屏幕亮度这个简单的 ...

  9. C#WinForm中显示实时时间:年/月/日 时/分/秒 星期X

    //加载窗体时 string weekstr = ""; private void Form22_Load(object sender, EventArgs e) { this.t ...

  10. Luence简单实现1

    初步认识Luence,简单按照官方文档做了个例子,大牛绕开,仅供小白路过参考.如有错误,欢迎指正批评. 建一个简单工程,并且加入这几个小奶瓶,如下图: 注:版本不同,可能对jdk的需求是不同的,这个需 ...