zoukankan      html  css  js  c++  java
  • 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集合)通过反编译可以查看到【总结:页面就是控件

  • 相关阅读:
    PAT甲级1107. Social Clusters
    PAT甲级1103. Integer Factorization
    PAT甲级1098. Insertion or Heap Sort
    hihocoder 162周 1323 : 回文字符串
    PAT甲级1095. Cars on Campus
    PAT甲级1089. Insert or Merge
    PAT甲级1087. All Roads Lead to Rome
    PAT甲级1076. Forwards on Weibo
    PAT甲级1066. Root of AVL Tree
    PAT甲级1057. Stack
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5620017.html
Copyright © 2011-2022 走看看