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來說 動態頁面aspx或ashx被瀏覽器請求時都是作為類的對象來運行的而不是像處理靜態頁面html或者圖片jpg一樣直接讀取文件里的內容
【他們被請求的時候就是一個頁面類對象 里面有很多的控件屬性(但非html代碼本身) 在執行到頁面ProcessRequest方法內部執行Page_Load事件之后
調用每個控件對象的Render方法生成對應的html代碼】
2、webForm前后台頁面aspx、aspx.cs文件在被訪問時會被編譯成類 前台頁面類繼承與后台頁面類
3、被訪問時服務器會創建【前台頁面類】對象來作為處理瀏覽器請求的對象
4、前台類對象是如何結合后台類的方法 生成整個頁面的html代碼的呢?==》被請求時 生成頁面控件對象樹控件樹負責組合整個頁面的內容(_BuildControlTree--生成控件樹方法)
【打造控件樹的目的就是將頁面html代碼、服務端代碼 runat=server部分代碼整合在一起】
5、繼承關系:前台頁面類-》后台頁面類-》page-》TemplateControl-》Control(包含ControlCollection集合)通過反編譯可以查看到【總結:頁面就是控件】

