ASPNET页面事件执行过程
aspx页面请求与处理的详细过程

IIS处理页面的运行机制:IIS 自身是不能处理像ASPX扩展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页面,是因为IIS有一个ISAPI(Internet Server Application Programe Interface,互联网服务器应用程序接口)过滤器,它是一个COM组件(就是可以被HTTP服务器加载和调用的DLL),虽然这 ISAPI 听上去还挺气派,也算是“应用程序”呢,但仔细看看它的全称就明白了:它实际上只是一个接口,起到一个代理的作用,它的主要工作是映射所请求的页面(文件) 和与此后缀名相对应的实际的处理程序。
服务在注册到IIS的时候,就会添加一个Win32的扩展动态库aspnet_isapi.dll。
并将扩展可以处理的页面扩展名(如ASPX)注册到IIS里面。
扩展启动后,就根据定义好的方式来处理IIS所不能处理的页面。
当客户端请求一个服务器资源时,这个HTTP请求会被inetinfo.exe进程截获(www服务),然后Check请求资源的类型,并依据资源映射信息(存储在IIS 元库中,一种IIS专用的配置数据库)将请求的资源分配给特定的处理程序模块。
若请求的是静态资源(img,text,html 等)则由IIS处理(IIS在本地Web Server 上访问请求的文件),将内容输出到控制台,发出请求的浏览器就能接收到它了。
若需要在服务器端处理的请求,则会被传到已注册的扩展模块中,aspx请求会被分配给aspnet_isapi.dll,让这个程序开始处理代码,生成标准的HTML代码,然后将这些HTML加入到原有的 HTML中,最后把完整的HTML返回给IIS,IIS 再把内容发送到客户浏览器。
FrameWork对请求的处理:上面说到IIS将像ASPX这样的页面分配给aspnet_isapi.dll,接着处理如下:1、 aspnet_isapi.dll则会通过一个Http PipeLine的管道将这个Http请求发给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做aspnet_wp.exe),之后 framework就会通过HttpRuntime来处理这个Http请求。
ASP.NET的运行原理与运行机制

的运⾏原理与运⾏机制在4和4.5中,新增了WebPages Framework,编写页⾯代码使⽤了新的Razor语法,代码更加的简洁和符合Web标准,编写⽅式更接近于PHP和以前的Asp,和使⽤WebForms这种模仿Windows Form编程⽅式有了很⼤不同,不再有⼤量控件和控件⽣成的⼤量不够灵活的代码,但是同样可以使⽤提供的⼤量类库和功能,可以说WebPages框架融合了Asp、PHP和的全部优点,⼜可使⽤C#和VB 编程语⾔。
⼀看到WebPages框架,我就马上有了深⼊学习的兴趣,因为它和WebForms相⽐⽴刻就会让有完美主义情结的程序员们倾⼼。
但WebPages框架却并没有绑定Razor语法,它可以使⽤第三⽅的视图引擎。
WebPages和Razor也并没有和 MVC具有必然的联系。
在VS2012中默认的⽹站模板⾥⾯多了”⽹站(Razor v2)“,可以根据Razor语法创建WebPage。
WebPages⽹站简介WebPages⽹站包含多个cshtml或vbhtml页⾯,这些页⾯中使⽤Razor模板语法,整个⽹站的⽂件都在⼀个⽂件夹中,bin⽬录中有各种要⽤到的dll,没有解决⽅案⽂件,解决⽅案⽂件在另外⼀个和⽹站同时创建的项⽬中,其中有packages⽬录以管理WebPages⽹站需要⽤到的包。
⼀个普通的cshtml页代码如下:@{var db = Database.Open("StarterSite");var users = db.Query("Select * From UserProfile");var grid = new WebGrid(users);}<!DOCTYPE html><html><head><title></title></head><body>@grid.GetHtml()</body></html>从中可以看到,这种编写⽅式和PHP、Asp很相似,但WebPages⾝后却是庞⼤的类库。
ASP .NET动态网页设计案例教程 (5)

(5) 通过使用各个验证控件和页面公开的对象模型,可以与验证控件进行交互。每个 验证控件都会公开自己的 IsValid 属性,可以测试该属性以确定该控件是否通过验证测试。 页面还公开一个 IsValid 属性,该属性总结页面上所有验证控件的 IsValid 状态,并允许执 行单个测试,以确定是否可以继续自行处理。
第5章
使用 ASP .NET 验证控件检验表单
通过本章您将学习:
z 使用 ASP .NET 验证控件验证 Web 窗体页上的输入 z 使用必须验证控件 z 使用总结验证控件 z 使用正则表达式验证控件 z 使用比较验证控件 z 使用范围验证控件 z 使用自定义验证控件
ASP .NET 动态网页设计案例教程(Visual Basic .NET 版)
(a) 初始页面运行效果
(b) 必输信息显示效果
px 的运行效果
解决方案: 该 ASP .NET Web 页面使用如表 5-2 所示的 Task1.aspx 的页面控件完成指定的任务。
表 5-2 Task1.aspx 的页面控件
类型 TextBox RequiredFieldValidator TextBox RequiredFieldValidator TextBox RequiredFieldValidator TextBox RequiredFieldValidator TextBox RequiredFieldValidator ValidationSummary Button Label
任务 1:使用必须验证控件验证用户登记信息
操作任务: 创建网上个人商品销售登记 ASP .NET Web 页面 Task1.aspx,输入个人用户信息,要求 必须输入用户名、密码、电子邮箱、电话号码和邮政编码。
《ASP.net》实验指导书

ASP实验指导书目录实验1: ASP Web服务器的安装与配置................................- 1 - 实验2:HTML标记符的使用(表格、表单对象、CSS样式) ......................................................................................................- 3 - 实验3:VBScript 程序设计..................................................- 5 - 实验4:ASP内建对象..............................................................- 7 - 实验5:数据库基础知识 ......................................................- 10 - 实验6:ASP存取数据库 .......................................................- 12 - 实验7:深入进行数据库编程..............................................- 13 - 实验8:文件存取组件及其他组件 .....................................- 16 -实验1:ASP Web服务器的安装与配置一、实验目的熟悉IIS的安装过程与配置方法。
通过编写简单的ASP页面,掌握ASP网页的编写和运行方法。
二、实验器材及数量Windows Server计算机系统,安装IIS、Macromedia Dreamweaver 8.0、Internet Explorer浏览器、Access数据库等。
三、实验原理利用ASP中对象的方法、事件、属性制作动态网页。
ASPnet实验报告电子版

实验三 服务器控件实验目的:●掌握 4.0页面时间的处理过程●熟练应用基本的Web服务器控件实验内容及要求:在网站的用户注册页面,通常都可以通过下列列表框动态选择用户的头像。
本实验就是先这样的功能。
要求如下:●当“头像”下拉列表中的选项发生改变时,网页上显示的头像也随之改变。
●单击“提交”按钮,将用户选择的头像信息显示在Label控件上。
实验步骤:(1)启动Visual Studio 2010,创建一个 WEB网站,命名为“课堂练习2”。
(2)在网站根目录下创建一个名为Default.aspx的窗体文件。
(3)设计Web窗体。
切换到设计视图,想页面添加1个Image控件、1个Button 控件、一个DropDownList控件和1个label控件。
(4)设置属性。
(5)设置DropDownList1中的列表项内容。
将鼠标移到DropDownList1控件上,其上方会出现一个向右的小三角。
单击它,弹出“DropDownList任务”列表。
选择列表中的“编辑项”命令,弹出如图所示的“ListItem集合编辑器”对话框。
单击“添加”按钮可像“成员”列表中添加选项,并在“属性”列表中设置选项的Text属性和Value属性,其中,Text属性是列表框控件中显示的文本;而Value属性为对应头像的路径。
最后单击“确定”按钮。
如果要将选项设置为选中的状态,可以将Selected属性设置为true。
(6)编写下拉列表事件代码如下:(7)编写“提交”按钮被单击是执行的时间代码如下:(8)浏览建立的Web窗体进行测试。
实验四 网站设计实验目的:●熟练掌握各种导航控件的使用●能够在网站中创建母版页和内容页实验内容及要求:合理创建商场积分卡管理系统的站点地图Web.sitemap。
要求如下:●站点地图的层次要清晰●编写的代码必须符合站点地图的规范要求实验步骤(1)启动Visual Studio2010,创建一个 Web网站,命名为“课堂练习1”(2)在网站根目录下创建一个名为Web.sitemap的站点地图文件(3)在Web.sitemap的站点地图文件中编写代码如下实验五访问数据库实验目的:●在SQL Server 2008中创建数据库●掌握的操作对象●熟练运用数据访问技术对数据库进行操作实验内容及要求:(1)在SQL Server 2008中创建数据库和数据表。
.NET页面page处理的过程讲解

一个Page处理的过程讲解背景知识Page类的派生关系Page是从TemplateControl中派生的,TemplateControl从Control派生。
他们的定义分别如下://Control,从object派生,实现了四个接口public class Control : ponentModel.IComponent,System.IDisposable,System.Web.UI.IParserAccessor,System.Web.UI.IDataBindingsAccessor{}//TemplateControl从Control派生,实现了接口System.Web.UI.INamingContainerpublic abstract class TemplateControl : Control, System.Web.UI.INamingContainer{}//Page从TemplateControl派生,实现了接口System.Web.UI. IHttpHandlerpublic class Page : TemplateControl, System.Web.IHttpHandler{}而你编写的Page,你在_aspx.cs文件中编写的类是从Page派生,这个继承关系是你添加WebForm页面时,Visual Studio .net帮你建好的。
而aspx的页面在运行时会被解释为一个从_aspx.cs文件中的类的派生类。
(这里需要补充资料)。
正题猜想当IIS接收到aspx页面一个请求,交给aspnet_isapi.dll处理。
aspnet_isapi然后做以下的事情:MyPage __p;__p = new MyPage();__p.ProcessRequest(System.Web.HttpContext.Current)以上是我个人的估计,究竟事实是不是这样,我会找Microsoft的工程师要答案!我在System.Web.dll中没有找到处理产生Page实例的il,Page类的实例的创建可能是aspnet_isapi.dll作了,而aspnet_isapi.dll不是使用.net编写的,其内部的运行究竟如何无从得知。
《ASP.NET网页设计与网站开发》习题参考解答

据对定位和相对定位的区别是:参照物不同、z-index值相同时的处理方式不同。
4.解释下列概念
CSS、内联式、嵌入式、外部链接式
【解答要点】
第2章
1.简要回答什么是HTML、XML和XHTML。
【解答】
HTML超文本标记语言,是一种基于标记的网页设计语言。XML是用来对信息进行自我描述而设计的一种新语言。同HTML一样,XML也是一种基于文本的标记语言,但是XML可以让用户根据要表现的文档,自由地定义标记来表现具有实际意义的文档内容。XHTML是为了适应XML而重新改造的HTML,也是一种标记语言。它可以看作是从HTML到XML的过渡。XHTML要求在网页中出现的任何元素都应该被标记出来。
(5)服务器执行后台代码指定的操作。
(6)服务器将执行操作后的页面以HTML或XHTML标记的形式发送到客户端浏览器。
2.状态管理有哪些方式?
页面的状态管理有多种方式,有视图状态、Application和Session对象、Cookie对象、控件状态、隐藏域和配置文件等。
3.设计一个Web应用程序,包含一个页面,添加一个按钮。在该页面的Page_Load事件中添加代码将一个数组保存到视图状态中,然后单击按钮时,将该视图状态中的值换行输出到页面上。
见源程序。
第
1.Web服务器控件和Windows控件的执行有何不同?
【解答】
Windows控件的属性、方法、事件等都是在本机上执行的,而Web服务器控件则全部是在服务器端执行的。
2、利用HiddenField控件是否可用来存储保密数据?为什么?
ASP.NET按钮控件中CommandName和CommandArgument用法

Ab tat I a sr c: n We p g, t u g whc bt n n go p f b t n i lk d y sr a b ahee b uig b ae O de j i h u o i a ru o ut s s i e b ue cn e c i d y s t o c c v n
t t 0 m nAgm n用来给出或设置 B an e 。c m ad ru et x u o 控件 的命令参
在 AS .E PN T中 , 通过 使 用 B t n ut 控件在 网 页上既可 创建 数 , 引发事件 的源 的命令参数 , 当于 v l 值 。这两个值为 o 是 相 ae u “ 提交” 按钮 , 也可 以创建 “ 命令” 按钮 。这两种按钮 的主要区别 只读 的, 需要在设计阶段指定 , 在程序中不能 动态修改 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
母版页和内容页中的事件母版页和内容页都可以包含控件的事件处理程序。
对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。
控件事件不会从内容页发送到母版页。
同样,也不能在内容页中处理来自母版页控件的事件。
在某些情况下,内容页和母版页中会引发相同的事件。
例如,两者都引发Init和Load事件。
引发事件的一般规则是初始化事件从最里面的控件向最外面的控件引发,所有其他事件则从最外面的控件向最里面的控件引发。
请记住,母版页会合并到内容页中并被视为内容页中的一个控件,这一点十分有用。
下面是母版页与内容页合并后事件的发生顺序:1.母版页控件 Init 事件。
2.内容控件 Init 事件。
3.母版页 Init 事件。
4.内容页 Init 事件。
5.内容页 Load 事件。
6.母版页 Load 事件。
7.内容控件 Load 事件。
8.内容页 PreRender 事件。
9.母版页 PreRender 事件。
10.母版页控件 PreRender 事件。
11.内容控件 PreRender 事件。
母版页和内容页中的事件顺序对于页面开发人员并不重要。
但是,如果您创建的事件处理程序取决于某些事件的可用性,那么您将发现,了解母版页和内容页中的事件顺序很有帮助。
关于中页面事件加载的先后顺序Page 执行中将按照如下顺序激活事件:Page.PreInitPage.InitPage.InitComplitePage.PreLoadPage.LoadPage.LoadCompletePage.PreRenderPage.PreRenderComplete如果页面从另一个页面继承,如BasePage:System.Web.UI.Page,在BasePage 中做了一些扩展,如权限检查,而其他页面从BasePage继承,则BasePage和最终Page的事件激活顺序是:UI.PreInitPage.PreInitUI.InitPage.InitUI.InitComplitePage.InitCompliteUI.PreLoadPage.PreLoadUI.LoadPage.LoadUI.LoadCompletePage.LoadCompleteUI.PreRenderPage.PreRenderUI.PreRenderCompletePage.PreRenderComplete如果使用了MasterPage,则MasterPage中的事件和ContentPage中的事件按照下面顺序激活:ContentPage.PreInitMaster.InitContentPage.InitContentPage.InitCompliteContentPage.PreLoadContentPage.LoadMaster.LoadContentPage.LoadCompleteContentPage.PreRenderMaster.PreRenderContentPage.PreRenderComplete更进一步,如果ContentPage继承BasePage,那么,各事件的执行顺序将变成:UI.PreInitContentPage.PreInitMaster.InitUI.InitContentPage.InitUI.InitCompliteContentPage.InitCompliteUI.PreLoadContentPage.PreLoadUI.LoadContentPage.LoadMaster.LoadUI.LoadCompleteContentPage.LoadCompleteUI.PreRenderContentPage.PreRenderMaster.PreRenderUI.PreRenderCompleteContentPage.PreRenderComplete浏览下来发现并不是我现在所学的 1.1,估计应该是 2.0,不过也没有关系,这让我知道了他们有继承时加载的顺序。
即:先加载继承页的,再加载自己的,如果继承页有继承则先加载继承页的继承。
其实是个很简单的内容。
顺便写下Page事件(不知道1.1是不是就这些)Init,Load,PreRender事件执行顺序:1)控件的Init事件2)控件所在页面的Init事件3)控件所在页面的Load事件4)控件的Load事件5)控件所在页面的PreRender事件6)控件的PreRender事件规律:1)Init事件从最里面的控件(包括用户控件及普通控件)向最外面的控件(页面)引发,Load及PreRender等其他事件从最外面的控件向最里面的控件引发;2)控件之间相同事件的执行顺序依控件在页面的位置按从左到右,从上到下的先后顺序执行。
注意:1)切记用户控件也被视为页面中的一个控件;2)把用户控件作为单独的一个特殊页面来看,它本身及其所包含的控件同样遵守相同的规律;3)有时在客户端程序(如javascript)中会用到客户端body对像的onload事件,注意这个客户端事件是最后执行,即在服务器端所有事件执行完后才执行。
测试环境:Windows2000 Pro+IIS5.0+Dotnet Framework1.1===================================================================================转载一篇关于页面对象模型的文章,说得比较详细,有助理解。
没事的时候就多看两遍,慢慢体会:)。
页面对象模型Dino EspositoWintellect2003 年 8 月适用于:Microsoft® 摘要:了解为 Web 页面建立的事件模型,以及 Web 页面转变为 HTML 过程中的各个阶段。
HTTP 运行时负责管理对象管道,这些对象首先将请求的 URL 转换成 Page 类的具体实例,然后再将这些实例转换成纯 HTML 文本。
本文将探讨那些作为页面生命周期标志的事件,以及控件和页面编写者如何干预并改变标准行为。
(本文包含一些指向英文站点的链接。
)目录简介真正的 Page 类页面的生命周期执行的各个阶段小结简介对由Microsoft® Internet 信息服务 (IIS) 处理的Microsoft® 页面的每个请求都会被移交到 HTTP 管道。
HTTP 管道由一系列托管对象组成,这些托管对象按顺序处理请求,并将 URL 转换为纯 HTML 文本。
HTTP 管道的入口是HttpRuntime类。
结构为辅助进程中的每个 AppDomain 创建一个此类的实例。
(请注意,辅助进程为每个当前正在运行的 应用程序维护一个特定的 AppDomain。
)HttpRuntime类从内部池中获取HttpApplication对象,并安排此对象来处理请求。
HTTP 应用程序管理器完成的主要任务就是找到将真正处理请求的类。
当请求 .aspx 资源时,处理程序就是页面处理程序,即从Page继承的类的实例。
资源类型和处理程序类型之间的关联关系存储在应用程序的配置文件中。
更确切地说,默认的映射集是在 machine.config 文件的<httpHandlers>部分定义的。
但是,应用程序可以在本地的 web.config 文件中自定义自己的 HTTP 处理程序列表。
以下这一行代码就是用来为 .aspx 资源定义 HTTP 处理程序的。
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>扩展名可以与处理程序类相关联,并且更多是与处理程序工厂类相关联。
在所有情况下,负责处理请求的HttpApplication对象都会获得一个实现IHttpHandler接口的对象。
如果根据 HTTP 处理程序来解析关联的资源/类,则返回的类将直接实现接口。
如果资源被绑定到处理程序工厂,则还需要额外的步骤。
处理程序工厂类实现IHttpHandlerFactory接口,此接口的GetHandler方法将返回一个基于 IHttpHandler 的对象。
HTTP 运行时是如何结束这个循环并处理页面请求的?ProcessRequest方法在IHttpHandler接口中非常重要。
通过对代表被请求页面的对象调用此方法, 结构会启动将生成浏览器输出的进程。
真正的 Page 类特定页面的 HTTP 处理程序类型取决于 URL。
首次调用 URL 时,将构建一个新的类,这个类被动态编译为一个程序集。
检查 .aspx 资源的分析进程的结果是类的源代码。
该类被定义为命名空间 ASP 的组成部分,并且被赋予了一个模拟原始 URL 的名称。
例如,如果 URL 的终点是 page.aspx,则类的名称就是ASP.Page_aspx。
不过,类的名称可以通过编程方式来控制,方法是在@Page指令中设置ClassName属性。
HTTP 处理程序的基类是Page。
这个类定义了由所有页面处理程序共享的方法和属性的最小集合。
Page类实现IHttpHandler接口。
在很多情况下,实际处理程序的基类并不是Page,而是其他的类。
例如,如果使用了代码分离,就会出现这种情况。
代码分离是一项开发技术,它可以将页面所需的代码隔离到单独的 C# 和Microsoft Visual Basic® .NET 类中。
页面的代码是一组事件处理程序和辅助方法,这些处理程序和方法真正决定了页面的行为。
可以使用<script runat=server>标记对此代码进行内联定义,或者将其放置在外部类(代码分离类)中。
代码分离类是从Page继承并使用额外的方法的类,被指定用作 HTTP 处理程序的基类。
还有一种情况,HTTP 处理程序也不是基于Page的,即在应用程序配置文件的<pages>部分中,包含了PageBaseType属性的重新定义。
<pages PageBaseType="Classes.MyPage, mypage" />PageBaseType属性指明包含页面处理程序的基类的类型和程序集。
从Page导出的这个类可以自动赋予处理程序扩展的自定义方法和属性集。
页面的生命周期完全识别 HTTP 页面处理程序类后, 运行时将调用处理程序的ProcessRequest方法来处理请求。
通常情况下,无需更改此方法的实现,因为它是由Page类提供的。