全局定义页特定配置设置,如配置文件范围内的页和控件的 ASP.NET 指令。能配置当前Web.config目录下的所有页面的设置。

<pages
buffer="[True|False]"
enableEventValidation="[True|False]"
enableSessionState="[True|False|ReadOnly]"
enableViewState="[True|False]"
enableViewStateMac="[True|False]"
smartNavigation="[True|False]"
autoEventWireup="[True|False]"
pageBaseType="typename, assembly"
userControlBaseType="typename"
validateRequest="[True|False]"
masterPageFile="file path"
theme="string"
styleSheetTheme="string"
maxPageStateFieldLength="number"
compilationMode="[Always|Auto|Never]"
pageParserFilterType="string"
viewStateEncryptionMode="[Always|Auto|Never]"
maintainScrollPositionOnPostBack="[True|False]"
asyncTimeout="number"
>
<controls>
<add
assembly="指定程序集的名称"
namespace="指定与标记前缀关联的命名空间"
src="指定文件的名称"
tagName="指定页中要使用的控件的名称并且还需要设置 src 属性"
tagPrefix="指定映射到源文件或命名空间和程序集的标记前缀"/>
</controls>
<namespaces>
<add
namespace="指定要在预编译期间使用的命名空间"
/>
</namespaces>
<tagMapping>
<add
mappedTagType="指定 tagType 要重新映射到的类型的名称,新的控件名称"
tagType="指定要重新映射的标记的类型的名称。原有ASP.NET控件的名称"
/>
</tagMapping>
</pages>

与Pages上的部分设置可以在单独页面上通过@Page指令进行设置,Pages配置节的属性是@Page指令的子集,两者的属性说明则参考MSDN《pages 元素(ASP.NET 设置架构)》和《@ Page》。新建一个aspx页面,就会看到页面上的@Page命令

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="FastDoge.Study.WebForm2" %>

他们的作用是

Language:指定在对页中的所有内联呈现(<% %> 和 <%= %>)和代码声明块进行编译时使用的语言。值可以表示任何 .NET Framework 支持的语言,包括 Visual Basic、C# 或 JScript。每页只能使用和指定一种语言。

AutoEventWireup:指示页的事件是否自动绑定。如果启用了事件自动绑定,则为 true;否则为 false。默认值为 true。

CodeBehind:指定包含与页关联的类的已编译文件的名称。该属性不能在运行时使用。

Inherits:定义供页继承的代码隐藏类。它可以是从 Page 类派生的任何类。它与 CodeFile 属性(包含指向代码隐藏类的源文件的路径)一起使用。

AutoEventWireup的具体作用是,把隐藏类中的页事件的绑定方法(最常见的是Page_Load)自动绑定上去,因为通篇没看到给Page类显式绑定事件的代码。假如将其设置成false,Page_Load方法不会执行。

pages的子节点有三个:controls,namespaces和tygMapping

Namespaces与@Import指令

用于指定页面上的代码所需要的命名空间,实际上是给即时编译的编译器添加指定的命名空间

例如在webform中添加如下代码

    <form id="form1" runat="server">
<div>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{ Thread.Sleep(6000);
this.lb1.Text = "123 " + File.Exists(@"E:\123.txt");
}
</script>
<asp:Label ID="lb1" runat="server" />
</div>
</form>

打开页面则会发现预编译出错了

可以在web.config中添加pages配置节

    <pages>
<namespaces>
<add namespace="System.Threading"/>
<add namespace="System.IO"/>
</namespaces>
</pages>

这样运行就正常了

同样也可以在页面上使用@Import命令

<%@ Import Namespace="System.IO" %>

同样达到效果,一般情况下建立项目后,web.config的pages/namespaces下添加了若干个命名空间,所以.NET 类库里面的一些类能被在页面上调用,到后来的MVC里面同样有添加

但在MVC的Razor语法中,新增了@using语句,@Import使用变少了

Controls与@Register指令

定义标记前缀所在的 register 指令和命名空间的集合,我认为是用于指定用户控件和自定义控件。

在本次实践中,鄙人写了一个简单的用户控件MyLogin。

把它直接拖入WebForm2页面中,自动生成的代码如下所示

单纯在单个页面使用的话,引入非ASP.NET控件时需要用@Register声明控件的前缀和标签名,以及关联的控件文件。如果不想在每个页面都如此声明,则可以在web.config中添加配置

关键看controls那一节。此时清除页面上的@Register命令也不会出错。

注意:需要在web.config中声明控件的,控件文件*.ascx不能放在web.config的同层目录,否则运行则会报错。

controls 元素定义标记前缀所在的 register 指令和命名空间的集合。 此元素对应于 ASP.NET 页上的 @ Register 指令。 使用 @ Register 指令可以指定用户控件的标记前缀。

标记前缀将 ASP.NET 中的命名空间与 COM 控件和用户控件正常工作所需的程序集和命名空间相关联。 下面的信息在配置 controls 元素时很有用:

  • 如果应用于用户控件,则必须定义 add 子元素的 tagPrefix、tagName 和 source 特性。
  • 如果应用于自定义控件,则必须定义 add 子元素的 tagPrefix、namespace 和 assembly 特性。 如果控件位于应用程序代码目录中,则不需要 assembly 特性。

可以使用相同的 tagPrefix 值来映射到多个程序集或命名空间。

在以下情况中,使用 @ Register 指令:

  • 以声明方式将自定义服务器控件添加到网页、用户控件、母版页或外观文件(请参见 ASP.NET Themes Overview)。
  • 以声明方式将用户控件添加到网页、用户控件、母版页或外观文件。

使用 @ Register 指令引用控件时,可以将控件的代码放在以下位置:

  • 作为应用程序的 App_Code 文件夹的源代码,将在运行时在该文件夹中动态编译代码。 在开发过程中可以使用这一便捷选项。 如果您选择此选项,则不必在 @ Register 指令中使用 assembly 特性。
  • 作为应用程序的 Bin 文件夹中的编译的程序集。 这是一个针对部署的 Web 应用程序的通用选项。
  • 作为全局程序集缓存 (GAC) 中编译和签署的程序集。 这是一个针对希望在多个应用程序之间共享编译的控件的通用选项。 通过向 assembly 特性分配正在识别的字符串,可以引用 GAC 中的控件。 此字符串指定有关控件的所需详细信息,包括控件的完全限定类型名、版本、公钥标记和区域性。 下面的虚拟字符串阐明了对 GAC 中的自定义控件的引用:
    <%@ Register tagprefix="custom"
    namespace="Mycompany.namespace"
    assembly="Mycompany.namespace.control, Version=1.2.3.4,
    PublicKeyToken=12345678abcdefgh, Culture=neutral" %>

    有关引用程序集的更多信息,请参见compilation 的 assemblies 的 add 元素(ASP.NET 设置架构)

对于声明性用户控件,请使用 tagname、tagprefix 和 src 特性。 在页中声明控件时,前两个属性总是以冒号分隔对 (tagprefix:tagname) 的形式一起使用。 可以将多个命名空间映射到同一 tagname,如以下示例所示:

<% @Register tagprefix="tag1" namespace="MyNamespace1"/>
<% @Register tagprefix="tag1" namespace="MyNamespace2"/>

src 特性值既可以是相对路径,也可以是从应用程序的根目录到用户控件源文件的绝对路径。 为方便使用,建议使用相对路径。 例如,假设将应用程序的所有用户控件文件存储在应用程序根目录的子目录 \Usercontrol 中。 若要包括 Usercontrol1.ascx 文件中的用户控件,请在 @ Register指令中包含以下内容:

Src="~\usercontrol\usercontrol1.ascx"

代字号 (~) 字符表示应用程序的根目录。

当包含已经编译为 .dll 文件供应用程序使用的自定义服务器控件时,请将 tagprefix 特性与 assembly 和 namespace 特性一起使用。 如果没有包含 namespace 特性,或者为其分配了一个空字符串 (""),则会出现分析器错误。

tagMapping

定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型。通过下面的例子就明白tagMapping的作用了。首先添加了一个Login控件

然后开始更改,添加一个类FDLogin去继承Login控件,重写Render方法

         protected override void Render(HtmlTextWriter writer)
{
writer.BeginRender(); writer.RenderBeginTag("h1");
writer.Write("hello world");
writer.RenderEndTag();
writer.WriteBreak(); writer.Write(@"<div>
Id:<input type=""text"" name=""loginId"" />
</div>
<div>
Password:<input type=""password"" name=""password"" />
</div>
<div>
<input type=""reset"" value=""Reset"" />
<input type=""submit"" value=""login"" />
<input type=""button"" value=""Regist"" />
</div>");
writer.EndRender();

 

接着在web.config中添加

这样就把Login控件给玩坏,在aspx页面中添加的asp:Login控件全部变成经本人扩展后的FDLogin控件模样。在不改任何页面代码的情况下运行

在这次更改控件由于不太会使用HtmlTextWriter,所以很挫地使用了Wirte方法直接写html代码,应该上网看看其他控件的源码才对。浏览了一下源码,控件的Render操作实际上也是在一个Adapter中进行。但这个Adapter就不是System.Web.Mobile下面的,是System.Web下的。

pages与页面配置的更多相关文章

  1. VUE 多页面配置(二)

    1. 概述 1.1 说明 项目开发过程中会遇到需要多个主页展示情况,故在vue单页面的基础上进行配置多页面开发以满足此需求,此记录为统一配置出入口. 2. 实例 2.1 页面配置 使用vue脚手架搭建 ...

  2. [转] vue&webpack多页面配置

    前言 最近由于项目需求,选择使用vue框架,webpack打包直接使用的vue-cli,因为需要多页面而vue-cli只有单页面,所以就决定修改vue-cli的配置文件来满足开发需求. html-we ...

  3. vue&webpack多页面配置

    前言 最近由于项目需求,选择使用vue框架,webpack打包直接使用的vue-cli,因为需要多页面而vue-cli只有单页面,所以就决定修改vue-cli的配置文件来满足开发需求. html-we ...

  4. vue cli3超详细创建多页面配置

    1.首先按照vue cli3 给的入门文档下载个vue cli3 如果之前下载了vue cli2的要先卸载之前的 2.检查安装是否成功 3.ok,现在环境搭建好了,新建项目 vue create he ...

  5. 微信小程序学习笔记(二)--框架-全局及页面配置

    描述和功能 框架提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 响应的数 ...

  6. 使用Web页面配置ESP8266的参数

    前言 使用Web页面配置ESP8266的参数相对于使用串口AT指令配置更加直观和简单.与配置路由器方式类似. 基本思路 基本思路是ESP8266工作AP模式下,作为TCP Server监听TCP Cl ...

  7. VUE 多页面配置(一)

    1. 概述 1.1 说明 项目开发过程中会遇到需要多个主页展示情况,故在vue单页面的基础上进行配置多页面开发以满足此需求. 2. 实例 2.1 页面配置 2.1.1 默认首页 使用vue脚手架搭建后 ...

  8. 仿B站项目(3)页面配置

    页面配置 B站有很多页面,比如说首页啊,动画页啊,音乐页啊,舞蹈页啊,那就从首页开始. 通过观察首页,可以看见有很多模块除了内容之外,在布局颜色等方面都是一样的,所以我可以开发一些模板或者插件,到时候 ...

  9. Struts2框架笔记02_API_结果页面配置_数据的封装

    目录 1. Struts2的Servlet的API的访问 1.1 方式一:完全解耦合的方式 1.1.1 环境搭建 1.1.2 代码 1.1.3 测试 1.1.4 向域对象中存入数据 1.2 方式二:使 ...

随机推荐

  1. Visual Studio 2015 前端开发工作流

    Visual Studio 2015 CTP 5,全称为 Visual Studio 2015 Community Technology Preview 5,意为社区技术预览版,之前的版本为:Visu ...

  2. ENode框架Conference案例分析系列之 - 上下文划分和领域建模

    前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...

  3. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  4. 用JavaScript调用WCF Service

    原创地址:http://www.cnblogs.com/jfzhu/p/4039604.html 转载请注明出处 前面介绍过<Step by Step 创建一个WCF Service>和& ...

  5. PHPCMS后台密码忘记解决办法

    什么是PHPCMS? PHPCMS是一款网站管理软件.该软件采用模块化开发,支持多种分类方式,使用它可方便实现个性化网站的设计.开发与维护.它支持众多的程序组合,可轻松实现网站平台迁移,并可广泛满足各 ...

  6. Mac下安装与配置Go语言开发环境

    1.官网下载安装包(需FQ) https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg 2.配置Go环境变量GOPATH和GOBIN ( ...

  7. Atitit常见的标准化组织与规范数量jcp ecma iso

    Atitit常见的标准化组织与规范数量jcp ecma iso 1. 常见的标准化组织1 1.1. 重要的基金会apache1 1.2. 美国国家标准学会(American NationalStand ...

  8. iOS-屏幕适配-UI布局

    iOS 屏幕适配:autoResizing autoLayout和sizeClass 一.图片解说 -------------------------------------------------- ...

  9. weblogic10内存溢出解决方法

    在开发过程中经常会遇到weblogic内存溢出问题,用下面的办法解决了. 找到domain/bin下的setDomainEnv.cmd文件,里面可以找到以下四行代码,将值该打一倍,重启服务. set ...

  10. 有关binlog的那点事(二)(mysql5.7.13)

    上次,我们仅仅把binlog做了一个概述,并没有去深入探索(1)binlog file究竟是怎么构成的?(2)binlog file的单元binlog events是怎么构成的?(3)我们能不能伪造出 ...