什麼是 ASP/ASP+/ASP.NET
用 HTML 編寫的 Hello W3School這張 HTML 頁面的 HTML 代碼:<html><body bgcolor="yellow"><center><h2>Hello W3School!</h2></center></body></html>如果您希望親自試一試,可以把這些代碼保存在名為 "firstpage.html" 的文件中,然後創建一個到此文件的鏈接,就像這樣:firstpage.html。用 ASP.NET 編寫的 Hello W3School把 HTML 頁面轉換為 ASP.NET 的最簡單的方法是,把這個 HTML 文件拷貝為帶有 .aspx 後綴的新文件。這些將把我們的例子顯示為一個 ASP.NET 頁面:<html><body bgcolor="yellow"><center><h2>Hello W3School!</h2></center></body></html>如果您希望親自試一試,請把這些代碼保存在一個名為 "firstpage.aspx" 的文件中,並創建一個到此文件的鏈接:firstpage.aspx。它如何工作?從根本上講,ASP.NET 頁面與 HTML 完全相同。HTML 頁面的擴展名是 .htm 或 .html。假如瀏覽器從伺服器請求某張 HTML 頁面,伺服器不進行任何修改,就會把該頁面發往瀏覽器。ASP.NET 頁面的擴展名是 .aspx。如果瀏覽器請求某張 ASP.NET 頁面,那麼在把結果發回瀏覽器之前,伺服器首先會處理頁面中的可執行代碼。上面的 ASP.NET 頁面不包含任何可執行的代碼,因此也不會執行任何代碼。在下面的例子中,我們將向頁面添加一些可執行代碼,以便向您演示靜態 HTML 頁面與動態 ASP 頁面的不同之處。經典的 ASPActive Server Pages (ASP) 已經流行很多年了。通過 ASP,可以把可執行代碼放置於 HTML 頁面內部。ASP.NET 之前的 ASP 版本經常被稱為經典 ASP(Classic ASP)。ASP.NET 不完全兼容 Classic ASP,但是通過少量的修改,Classic ASP 可以良好地作為 ASP.NET 進行工作。如果您希望學習更多有關 Classic ASP 的知識,請訪問我們的ASP 教程。用 Classic ASP 編寫的動態頁面為了向您演示如何使用動態內容顯示頁面,我們向上面的例子添加了一些可執行代碼:<html><body bgcolor="yellow"><center><h2>Hello W3School!</h2><p><%Response.Write(now())%></p></center></body></html><% --%> 標籤內的代碼在伺服器上執行。Response.Write 是 ASP 代碼,用來向 HTML 輸出流文本。Now() 是一個可返回伺服器當前日期和時間的函數。如果您希望親自試一試,可以把這些代碼保存在名為 "dynpage.asp" 的文件中,並創建一個指向該文件的鏈接:dynpage.asp。用 ASP .NET 編寫的動態頁面下面的代碼可把我們的例子顯示為一個 ASP.NET 頁面:<html><body bgcolor="yellow"><center><h2>Hello W3School!</h2><p><%Response.Write(now())%></p></center></body></html>如果您希望親自試一試,請把這些代碼保存在名為 "dynpage.aspx" 的文件中,然後創建到此文件的鏈接:dynpage.aspx。ASP.NET vs Classic ASP上面的例子無法展示出 ASP.NET 與 Classic ASP 之間的不同之處。正如您在最後的兩個例子中看到的,在這個兩個 ASP 和 ASP.NET 頁面之間,沒有什麼不同之處。在下面的章節,您會看到,伺服器控制項如何使 ASP.NET 比 Classic ASP 更加強大。伺服器控制項是伺服器可以理解的標籤。Classic ASP 的局限性下面列出的代碼是從上一節中拷貝的:<html><body bgcolor="yellow"><center><h2>Hello W3School!</h2><p><%Response.Write(now())%></p></center></body></html>上面的代碼能夠反映出 Classic ASP 的局限性:代碼塊必須放置在需要進行輸出的位置。通過 Classic ASP,我們是無法將可執行代碼與 HTML 本身進行分離的。這使得頁面難以閱讀,也難以維護。ASP.NET - 伺服器控制項通過伺服器控制項,ASP.NET 已經解決了上面所描述的「義大利麵條式代碼」的問題。伺服器控制項是可被伺服器理解的標籤。有三種類型的伺服器控制項:HTML 伺服器控制項 - 傳統的 HTML 標籤Web 伺服器控制項 - 新的 ASP.NET 標籤Validation 伺服器控制項 - 用於輸入驗證ASP.NET - HTML 伺服器控制項HTML 伺服器控制項是伺服器可理解的 HTML 標籤。ASP.NET 中的 HTML 元素是作為文本來進行處理的。要想使這些元素可編程,就需要向這些 HTML 元素添加runat="server" 屬性。該屬性指示,此元素是一個伺服器控制項。同時要添加 id 屬性來標識該伺服器控制項。id 引用可用於操作運行時的伺服器控制項。注釋:所有 HTML 伺服器控制項必須位於帶有 runat="server" 屬性的 <form> 標籤內。runat="server" 屬性指示該表單應在伺服器進行處理。它同時指示其包括在內的控制項可被伺服器腳本訪問。在下面的例子中,我們在 .aspx 文件中聲明了一個 HtmlAnchor 伺服器控制項。然後我們在一個事件句柄中操作該 HtmlAnchor 控制項的 HRef 屬性。Page_Load 事件是眾多 ASP.NET 可理解的事件中的一種類型:注釋:事件句柄(event handler)是一種針對給定事件執行代碼的子常式。<script runat="server">Sub Page_Loadlink1.HRef="http://www.w3school.com.cn"End Sub</script><html><body><form runat="server"><a id="link1" runat="server">Visit W3School!</a></form></body></html>提示:可執行代碼本身已被移到 HTML 之外了。ASP.NET - Web 伺服器控制項Web 伺服器控制項是伺服器可理解的特殊 ASP.NET 標籤。類似 HTML 伺服器控制項,Web 伺服器控制項也在伺服器上創建,它們同樣需要 runat="server" 屬性以使其生效。不過,Web 伺服器控制項沒有必要映射任何已存在的 HTML 元素,它們代表更複雜的元素。創建 Web 伺服器控制項的語法是:<asp:control_name id="some_id" runat="server" />在下面的例子中,我們在 .aspx 文件中的聲明了一個 Button 伺服器控制項。然後我們為 Click 事件創建了一個事件句柄,它可修改按鈕上的文本:<script runat="server">Sub submit(Source As Object, e As EventArgs)button1.Text="You clicked me!"End Sub</script><html><body><form runat="server"><asp:Button id="button1" Text="Click me!" runat="server" OnClick="submit"/></form></body></html>ASP.NET - Validation 伺服器控制項Validation 伺服器控制項用於驗證用戶輸入。如果用戶輸入沒有通過驗證,將給用戶顯示一條錯誤消息。每種 validation 控制項執行一種特定的驗證類型(比如驗證某個具體的值或者某個範圍的值)。默認地,當點擊 Button, ImageButton 或 LinkButton 時,頁面驗證才會被執行。您可通過把 CausesValidation 屬性設置為 false,來阻止某個按鈕控制項被點擊時進行驗證。創建 Validation 伺服器控制項的語法是:<asp:control_name id="some_id" runat="server" />在下面的例子中,我們在 .aspx 文件中聲明了一個 TextBox 控制項,一個 Button 控制項,以及一個 RangeValidator 控制項。如果驗證失敗,文本 "The value must be from 1 to 100!" 將顯示在 RangeValidator 控制項中:<html><body><form runat="server"><p>Enter a number from 1 to 100:<asp:TextBox id="tbox1" runat="server" /><br /><br /><asp:Button Text="Submit" runat="server" /></p><p><asp:RangeValidatorControlToValidate="tbox1"MinimumValue="1"MaximumValue="100"Type="Integer"Text="The value must be from 1 to 100!"runat="server" /></p></form></body></html>TIY事件句柄(event handler)是一種針對給定事件來執行代碼的子常式。ASP.NET - 事件句柄請看下面的代碼:<%lbl1.Text="The date and time is " & now()%><html><body><form runat="server"><h3><asp:label id="lbl1" runat="server" /></h3></form></body></html>上面的代碼什麼時候會被執行?答案是:「我不知道. . .」Page_Load 事件Page_Load 事件是眾多 ASP.NET 可理解的事件之一。Page_Load 事件會在頁面載入時被觸發,然後 ASP.NET 會自動調用子常式 Page_Load,並執行其中的代碼:<script runat="server">Sub Page_Loadlbl1.Text="The date and time is " & now()End Sub</script><html><body><form runat="server"><h3><asp:label id="lbl1" runat="server" /></h3></form></body></html>注釋:該 Page_Load 事件不包含對象引用或事件參數!TIYPage.IsPostBack 屬性Page_Load 子常式會在頁面每次載入時運行。如果您僅希望在頁面第一次載入時執行 Page_Load 子常式中的代碼,您可以使用 Page.IsPostBack 屬性。如果 Page.IsPostBack 屬性為 false,則頁面第一次被載入,如果為 true,則頁面傳回伺服器(例如,通過點擊表單上的按鈕):<script runat="server">Sub Page_Loadif Not Page.IsPostBack then lbl1.Text="The date and time is " & now()end ifEnd SubSub Submit(s As Object, e As EventArgs)lbl2.Text="Hello World!"End Sub</script><html><body><form runat="server"><h3><asp:label id="lbl1" runat="server" /></h3><h3><asp:label id="lbl2" runat="server" /></h3><asp:button text="Submit" onclick="submit" runat="server" /></form></body></html>上面的例子僅在頁面初次載入時創建 "The date and time is...." 這條消息。當用戶點擊 Submit 按鈕時,submit 子常式將在第二個 label 創建 "Hello World!",但第一個 label 中的日期和時間不會改變。TIY
推薦閱讀:
※乾貨 || .NET逆向工程 (一)
※軟體序列號生成組件SoftwareProtector
※.NET CORE 框架ABP的代碼生成器(ABP Code Power Tools )使用說明文檔
※CLR線程概覽(上)