WebForm页面运行机制

 

WebForm前台与后台的关系及运行原理

前台页面 

复制代码
 <% @ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits ="_Default" %>
 <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 < html xmlns ="http://www.w3.org/1999/xhtml">
 < head runat ="server">
     <title > 首页</ title >
 </ head>
 < body>
     <%
     for ( int i = 0; i < 10; i++){
         Response.Write(strHello);
     }
     %> <!--前台页面<%@标记内容都是会在服务器端运行的-->
     <form id="form1" method="post"> <!--form表单默认发送Get请求-->
     <input type="text" id="txtBeauty" name="txtBeauty" runat="server" />
     <input type="submit" />
     <% = strHello %> <!--前台访问后台非私有成员-->
     <% Response.Write(strHello);%>
     </form >
 </ body>
 </ html>
复制代码

后台页面

复制代码
 1 using System;
 2 using System.Web.UI;
 3 public partial class _Default : Page {
 4     protected string strHello = "Hi~~piziyimao~~" ;
 5     //仅从使用上面来看:
 6     //ashx和WebForm使用方式都差不多,区别:
 7     //1.被请求时,调用的方法名不同:ashx - ProcessRequest , WebForm - Page_Load(他就是页面生命周期中的事件  页面生命周期就在PR[ProcessRequest]中执行)
 8     //2.WebForm不需要程序员手动的读取模板页了~~
 9     //3.访问Reqeust和Response等ASP.NET内部对象的时候,不需要再通过context点出来了 因为Page类已经包装了Context 而_Default : Page
10     //当页面被请求的时候,这个方法会被自动的调用
11     protected void Page_Load(object sender, EventArgs e) {
12         //前台html控件添加 runat=server 它会在程序编译的时候  成为一个变量存在后台页面对象中 所以后台可以this.点出
13         //this.txtBeauty.Value = "1243658561";//等价于(this.Controls[0] as HTMLInputText).value=...
14         //Response.Write("不是所有痞子都叫一毛" + strHello);//这里的代码会输出在页面html代码之前 可见aspx.cs页面先执行  aspx页面后执行
15         //补充:前台页面和后台页面的关系----------前台页面继承于后台 即1.aspx 继承与1.aspx.cs   前台页面控件编译后 会成为后台对象的属性
16         //this.txtBeauty.RenderControl();//每个Control都包含一个Render方法 此方法返回当前控件所生成的html代码
17         //且RenderControl内部 并非Response.Write 而是直接写入HtmlTextWrite中 所以页面源代码txtBeauty位置 有value属性
18         string strName = Request.Form["txtBeauty" ]; //和ashx拿到页面值做法一样
19         if (!string .IsNullOrEmpty(strName))
20             Response.Write( "不是所有痞子都叫一毛" + strName);
21         else
22             Response.Write( "没有值~~~" );
23         //反编译图片证实 aspx与aspx.cs关系以及页面控件树生成过程
24     }
25 }
复制代码

页面控件树生成详解:

总结:

1对于asp.net来说  动态页面aspxashx被浏览器请求时都是作为类的对象来运行的而不是像处理静态页面html或者图片jpg一样直接读取文件里的内容  

  【他们被请求的时候就是一个页面类对象  里面有很多的控件属性(但非html代码本身在执行到页面ProcessRequest方法内部执行Page_Load事件之后

  调用每个控件对象的Render方法生成对应的html代码】

2webForm前后台页面aspx、aspx.cs文件在被访问时会被编译成类  前台页面类继承与后台页面类

3、被访问时服务器会创建【前台页面类】对象来作为处理浏览器请求的对象

4、前台类对象是如何结合后台类的方法  生成整个页面的html代码的呢?==》被请求时  生成页面控件对象树控件树负责组合整个页面的内容(_BuildControlTree--生成控件树方法)

  【打造控件树的目的就是将页面html代码、服务端代码 runat=server部分代码整合在一起】

5、继承关系:前台页面类-》后台页面类-page-TemplateControl-Control(包含ControlCollection集合)通过反编译可以查看到【总结:页面就是控件

原文地址:https://www.cnblogs.com/liangxiaofeng/p/5620017.html