ASP.NET 控制页允许你为应用程序中的页面创建一致的布局。单个控制页中包含了为应用程序所有页面(或者一组页面)所定义的外观、感觉、以及标准行为。然后可以根据需要而分别创建单独的内容页。当用户对内容页进行请求时,内容页会合并到控制页中,并与控制页联合产生单一的页面输出。

控制页如何工作

控制页实际是由两个部分组成,即控制页本身和一个或多个内容页。

提示:你也可以对控制页进行嵌套使用。详细内容,请参考“嵌套的 ASP.NET 控制页”。

控制页

一个控制页就是一个扩展名为 .master 的 ASP.NET 文件(例如,MySite.master),它包含有预定义的网站布局,并且允许包括静态文本内容、HTML 元素、以及服务器控件。控制页使用特定的 @ Master 指令取代 .aspx 页面中的 @ Page 指令对文件进行标识。该指令示例如下。

<%@ Master Language="C#" %>

@ Master 指令可以使用 @ Control 指令中的大部分参数。例如,下例控制页的指令包括了代码分离文件的名称,并且为控制页指派一个类名称。

<%@ Master Language="C#" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

除了 @ Master 指令之外,控制页也可以包含所有页面中的顶级 HTML 元素,如 htmlhead、以及 form。例如,你可能需要在控制页中使用一个 HTML 表格来进行布局的定义、为公司的标志图案使用 img 元素、为版权声明使用静态的文本内容、以及创建标准网站导航的服务器控件。你甚至可以使用任何一个 HTML 或 ASP.NET 元素作为控制页中的组成部分。

可替换的内容占位器

除了显示在所有页面中的静态文本内容和控件之外,控制页中也可以包括一个或多个 ContentPlaceHolder 控件。这些占位器控件定义了用显示可替换内容的显示区域,而可替换内容则被定义在内容页中。下例是定义了 ContentPlaceHolder 控件之后的控制页实例。

<%@ Master Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" ><title>控制页标题</title>
</head>
<body><form id="form1" runat="server"><table><tr><td><asp:contentplaceholder id="Main" runat="server" /></td><td><asp:contentplaceholder id="Footer" runat="server" /></td></tr></table></form>
</body>
</html>
内容页

在创建单独的内容页时你需要对控制页占位器控件中的内容进行定义,这同样适用于 ASP.NET 页面(.aspx 文件以及可选的代码分离文件),这些文件必须与特定的控制页进行绑定。绑定操作通过在内容页的 @ Page 指令中使用 MasterPageFile 参数来对被使用的控制页进行定位。例如,某个内容页中可能使用下例 @ Page 指令与 Master1.master 进行绑定。

<%@ Page Language="C#" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page"%>

在内容页中,你可以添加 Content 控件来创建内容,该控件被映射到控制页中的 ContentPlaceHolder 控件。例如,控制页可能拥有名为 Main 和 Footer 的两个内容占位器。在内容页中,你可以创建两个 Content 控件,一个映射到 ID 为 Main 的 ContentPlaceHolder 控件,而另一个映射到 ID 为 Footer 的 ContentPlaceHolder 控件,如下图所示。

替换占位器的内容

在创建 Content 控件之后,你就可以在其中添加文本内容和控件了。在内容页中,位于 Content 控件(除了运行在服务器端的脚本定义)之外的任何事物都会导致出现错误。跟 ASP.NET 页面一样,你可以在内容页中完成任何任务。例如,你可以使用服务器控件、数据库查询或其他动态机制来生成 Content 控件中的内容。

下例代码是某个内容页的定义。

<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="内容页 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">主要内容。
</asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >页脚内容。
</asp:content>

@ Page 指令将内容页与指定的控制页进行绑定,它为将被合并到控制页中的页面定义标题。注意:内容页不能够在 Content 控件之外包含任何标记和内容。控制页必须包含一个指定了 runat="server" 参数的 head 元素,这样页面标题的设定才能够在运行时被合并到控制页中。

你可以创建多个控制页来为网站的不同部分定义不同的布局,并且为每一个控制页定义不同的内容页。

控制页的优势

在传统的开发过程中,开发者所做的任务大多效率不高,他们需要分别对现有代码、文本内容、以及控件元素进行拷贝以创建新的文件,或者为了统一布局而使用框架集;为公共元素使用包含文件;自定义各种 ASP.NET 用户控件;等等。控制页的出现改变了这一局面,下面列出使用控制页时的优势:

  • 它们允许你对页面的公共功能进行汇集,所以你只需要在一个位置进行更改就能够在多个页面中更新。

  • 它们简化了控件集、页面集、以及代码的创建。例如,你可以在控制页中使用控件来创建应用于所有页面的菜单。

  • 它们赋予你超出最终页面布局之上的细节控制,以允许你对占位器控件的呈现方式进行控制。

  • 它们提供了一个允许你从单独内容页中对控制页进行自定义的可编程对象模型。

控制页的运行时行为

控制页在运行时将按照下列顺序进行处理:

  1. 用户通过输入内容页的 URL 来发送页面请求。

  2. 当页面已得到,将读取 @ Page 指令。如果指令中对控制页进行了引用,那么控制页也将会被读取。如果该页面是第一次被请求,那么它将与控制页一起被编译。

  3. 内容已更新的控制页被合并到内容页的控件树中。

  4. 单独的 Content 控件内容会与控制页中相应的 ContentPlaceHolder 控件内容进行合并。

  5. 将被合并的结果页面呈现给浏览器。

该处理过程如下图所示。

运行时的控制页

从用户的观点来看,被组合的控制页和内容页都是单独的,离散的页面。页面的 URL 实际上指的是内容页的 URL。

从编程的观点来看,两个页面分别为各自的控制而扮演了容器的角色。内容页扮演的是控制页的容器。但是,你可以从内容页的代码中对公共控制页的成员进行引用,下面的部分将进行描述。

要注意的是,在控制页成为内容页的一部分之后。如果有效,那么控制页会扮演与大多数用户控件相同的角色,即成为内容页的子控件以及内容页的容器。但是,在这种情况下,控制页是作为所有服务器控件的容器被呈现到浏览器的。被合并的控制页和内容页中的控件树可能像这样:

PageMaster Page(Master page markup and controls)ContentPlaceHolderContent page markup and server controls(Master page markup and controls)ContentPlaceHolderContent page markup and server controls(Master page markup and controls)

该图是已经被简化;即使内容页没有相应的 Content 控件,那么控制页的 ContentPlaceholder 控件中也允许存在标记和控件。

通常,这个结构不会对页面或程序的构造方式造成影响。但是,在有些情况下,如果你在控制页中设置了一个页面级属性,那么它将会影响到内容页的行为,那是因为控制页是页面中是最顶层的控件。例如,如果你在内容页中设置属性 EnableViewState 的值为 true,而在控制页中设置该属性的值为 false,那么视图状态将会受到影响从而被禁用,因为控制页中的设定拥有更高的优先权。

控制页和内容页的路径

当某个内容页被请求时,它的内容会与控制页进行合并,并且页面运行在内容页的上下文空间里。例如,如果你获得了 HttpRequest 对象的 CurrentExecutionFilePath 属性,那么,不论是在内容页代码中还是在控制页代码中,该路径展示的始终是内容页的位置。

控制页和内容页不一定要同时被保存在相同的目录中。只要内容页的 @ Page 指令的 MasterPageFile 参数指向有效的控制页路径,ASP.NET 就能够把内容页和控制页合并成一个单独呈现的页面。

外部资源的引用

内容页和控制页中都可以包含对外部资源进行引用的控件和元素。例如,可以包含引用图片文件的图片控件,或者是包含引用到其他页面的超级链接。

因为被合并内容和控制页使用的都是内容页的上下文空间。所以有可能对资源 URL 的指向产生影响,如图片文件和目标文件的超级链接。

服务器控件

在控制页的服务器控件中,ASP.NET 会对引用外部资源的 URL 进行动态更改。例如,你可能在控制页中放置了一个 Image 控件,并且它的 ImageUrl 属性值被设置成相对于该控制页的路径。在运行时,ASP.NET 就会把 URL 更改成与内容页面上下文空间中相一致的正确路径。

ASP.NET 在下列情况下会对 URL 进行更改:

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

  • 当该属性在控件内部被标记为 URL(该属性与 UrlPropertyAttribute 一起被标记)属性时。在实际情况中,ASP.NET 服务器控件属性通常是通过这样的方式对外部资源的引用进行标记的。

其他元素

ASP.NET 不可以更改非服务器控件元素中的 URL。例如,如果你在控制页中使用了一个已设置 src 参数的 img 元素,ASP.NET 将不会更改该参数的值,参数值将会在当前内容页的上下文环境中解析并被创建。

通常,在控制页中使用元素的时候,建议你使用服务器控件,那些不需要编写服务器代码的普通元素也是一样。例如,作为使用 img 元素的替代,我们使用一个 Image 服务器控件。那么,ASP.NET 就会对 URL 完成正确的解析,并且你也可以避免在移动控制页或内容页时的出现链接维护问题。

更多关于 ASP.NET 服务器控件路径的信息,请参考“ASP.NET 网站路径”。

控制页和主题

你不可以直接在控制页中使用 ASP.NET 主题。如果你在 @ Master 指令中添加了主题参数,那么该页面在运行时将会出现一个错误。

但是,在下列特定环境中是可以把主题应用到控制页的:

  • 如果主题被定义在内容页中。因为控制页会被解析成内容页的上下文空间中的一部分,所以内容页的主题可以在控制页中得到应用。

  • 如果配置文件的 Pages 元素(ASP.NET 设定大纲)中包括了应用于整个网站的主题定义。

更多信息,请参考“ASP.NET 主题和皮肤概览”。

控制页的应用范围

你可以实现三个应用级别的内容页和控制页的绑定操作:

  • 页面级别

    你可以在每一个内容页中使用 @ Page 指令把内容页绑定到控制页,如下例代码所示。

    <%@ Page Language="C#" MasterPageFile="MySite.Master %>
    
  • 应用程序级别

    通过对应用程序配置文件(Web.config)中的页面元素的设定进行标记,你可以为应用程序中所有 ASP.NET 页面(.aspx 文件)指定要进行绑定的控制页。该元素如下例代码所示。

    <pages masterPageFile="MySite.Master" />
    

    如果你使用这个策略,那么应用程序中所有包含 Content 控件的 ASP.NET 页面都会与特定的控制页进行合并。如果某个 ASP.NET 页面没有包含 Content 控件,那么控制页将无法应用于该页面。

  • 目录级别

    这个策略有点像应用程序级别的绑定,不同的是你只能够对一个目录中的 Web.config 文件进行设定。这时候的控制页绑定会应用于该目录中的所有 ASP.NET 页面。

转载于:https://www.cnblogs.com/Laeb/archive/2006/12/26/604176.html

ASP.NET 控制页概览相关推荐

  1. ASP.NET 控制页和内容页中的事件

    控制页和内容页中都可以包含有控件的事件处理器.控件的事件通常在局部进行处理,如内容页中的控件会在内容页中引发事件,而控制页中的控件则会在控制页中引发事件.所以,内容页中的控件事件不会被发送到控制页中. ...

  2. ASP.NET 状态管理概览

    页面每次被回传到服务器的时候都会创建 Web 页面类的一个新实例.在传统的 Web 开发中,这意味着在每次回传的过程中,页面中所有与页面和控件相关联的信息都将被丢失.例如,如果用户在一个文本框中输入了 ...

  3. ASP.NET 状态视图概览

    Web 应用程序是无状态的.服务器中的页面在每一次被请求的时候都会创建 Web 页面类的新实例.这通常意谓着所有与页面和控件相关联的信息在每次回传过程中都将被丢失.例如,如果用户在某个 HTML We ...

  4. asp.net 控制页面css样式

    asp.net 控制页面css样式   fontDiv.Style["display"] = "none";   fontDiv.Style["dis ...

  5. asp.net 控制windows服务

    asp.net 控制windows服务 最近做一个小的项目,经理要求winform与web都可操作.于是将其做成服务,winform下调用很简单.asp.net下大部分过程是一样的.但需要涉及到用户的 ...

  6. [译]用AngularJS构建大型ASP.NET单页应用(二)

    原文地址:http://www.codeproject.com/Articles/808213/Developing-a-Large-Scale-Application-with-a-Single 客 ...

  7. ASP.NET跨页传值方法汇总

    方法一:问号传值(Response.Redirect方法) 1:源页:在按钮的点击事件程序中写入Response.Redirect方法,在其中使用问号传值.如: Response.Redirect(& ...

  8. DreamWeaver做ASP 第13页

    第七步:修改资料篇 修改资料!首先要清醒一点,什么人才可以修改. 一,本人只能修改自己的:二,管理员可以修改所有人的. 那今天先来搞个可以修改自己资料的页面. 顺序是:先确认是正确登录,然后才是自己的 ...

  9. asp.net常规页生命周期阶段列表和事件列表

    当我们使用asp.net开发网站,每运行一个页面,这个页面都将经历一个生命周期.了解页的生命周期非常重要,因为这样我们才能在合适的生命周期编写代码实现预期效果.网上有一句话概括非常精辟:"D ...

  10. DreamWeaver做ASP 第5页

    第三步:数据库显示篇 站点建了,DW也管理了,数据库表也建了,还小添了一下.那下面就开用DW还算强大的功能:连接数据库并且显示纪录. 1,打开DW,在站点里面先新建个ASP页面(index.asp). ...

最新文章

  1. windows Azure
  2. 怎样在计算机页面加密,怎么给文件加密并加密后隐藏起来?
  3. linux find 文件夹下查找字符串
  4. linux vsftpd用法,Linux_LINUX系统下vsftpd 命令详解,FTP命令是Internet用户使用最频 - phpStudy...
  5. Capistrano3 与 Mina
  6. [转]ubuntu server:开机自动登录
  7. wms策略文档_内容策略:技术文档的新理念
  8. 笔记16(shell编程)
  9. 等级考试(一):三级网络---似曾相识
  10. 1010. 一元多项式求导 (25)-PAT乙级真题
  11. Workstation-CentOS-XShell-YUM源 JAVA大数据Week5-DAY1-linux
  12. 萌新接触前端的第三课——JavaScript
  13. SQL Server 2008 R2 安装及登录
  14. 体系结构复习2——指令级并行(分支预测和VLIW)
  15. 扬帆跨境电商:虾皮如何匹配最佳图片
  16. 昨夜今晨全球大公司动态
  17. 香港美食攻略(3)——源记喳咋
  18. 1660用哪个驱动稳定_3DS MAX哪个版本更稳定更好用?各个版本来分析
  19. CSDN20181218博客黑板报
  20. 左右脸软件测试初学者,安卓左右脸对称测试app

热门文章

  1. 转发技术风雨三十年,你经历过……
  2. linux内存源码分析 - 内存回收(匿名页反向映射)
  3. Linux 分区简介
  4. 2021-10-28 ACWING826 单链表
  5. scala中的柯里化函数
  6. 使用消息队列的十大理由
  7. 列存储中常用的数据压缩算法
  8. Mybatis 查询出来的数据数量正确,但是具体数据为null
  9. netbeans写登录界面java_NetBeans 界面美化与字体设置
  10. html下拉框绑定字段,封装html的select标签的js操作实例