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集合)通過反編譯可以查看到【總結:頁面就是控件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM