net中使用母版页

2024-05-29 16:58
文章标签 使用 net 母版

本文主要是介绍net中使用母版页,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

.net中使用母版页的优点

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

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

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

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

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

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

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

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

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

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

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

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

运行时的母版页

MasterPagesMerge 图

从用户的角度来看,合并的主控和内容页是一个单独而离散的页。该页的 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 特性解析为一个 .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 设置架构) 元素中包含主题定义来将整个站点配置为使用主题。


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

  • VB
    <%@ Page Language="VB" MasterPageFile="MySite.Master" %> 
    

    C#
    <%@ 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中使用母版页的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014111

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND