ASP 是一種使嵌入網(wǎng)頁(yè)中的腳本可由因特網(wǎng)服務(wù)器執(zhí)行的服務(wù)器端腳本技術(shù)。
在您繼續(xù)學(xué)習(xí) ASP .NET 之前,擁有對(duì)微軟 ASP 技術(shù)的基本了解釋有幫助的。
如需學(xué)習(xí)更多 ASP,請(qǐng)?jiān)L問我們的《ASP 教程》。
ASP+ 等同于 ASP.NET。
ASP+ 是微軟研發(fā) ASP.NET 期間所使用的早期名稱。
ASP 3.0 是 ASP 的最新版本,但不會(huì)再有 ASP 4.0 版本了。
ASP.NET 是下一代的 ASP,但是不能把 ASP.NET 稱為 ASP 的升級(jí)版本。ASP.NET 是全新的服務(wù)器端 ASP 腳本。
ASP.NET 是 .NET 框架的組成部分。微軟耗時(shí)三年從底層重寫了 ASP.NET,而 ASP.NET 無(wú)法完全向后兼容 ASP 3.0。
您會(huì)在本教程的下一節(jié)了解到 ASP 與 ASP.NET 之間的差異所在。
.NET 框架是微軟 .NET 平臺(tái)的基礎(chǔ)結(jié)構(gòu)。
.NET 框架是構(gòu)建、開發(fā)及運(yùn)行 Web 應(yīng)用程序和 Web 服務(wù)的一種環(huán)境。
.NET 框架含有公共語(yǔ)言運(yùn)行庫(kù)和公共類庫(kù) - 比如 ADO.NET、ASP.NET 以及 Windows 窗體 - 來(lái)提供可整合入各種計(jì)算機(jī)系統(tǒng)的高級(jí)標(biāo)準(zhǔn)服務(wù)。
.NET 框架可提供特性豐富的應(yīng)用程序環(huán)境、簡(jiǎn)化的開發(fā)以及眾多開發(fā)語(yǔ)言之間的輕松整合。
.NET 框架中立于語(yǔ)言。目前,它支持 C++、C#、Visual Basic 以及 JScript(微軟的 JavaScript 版本)。
微軟的 Visual Studio.NET 是針對(duì) NET Framework 的公共開發(fā)環(huán)境。
ASP.NET 擁有更好的語(yǔ)言支持,一整套新的控件,基于 XML 的組件,以及更好的用戶身份驗(yàn)證。 ASP.NET 通過(guò)允許編譯的代碼,提供了更強(qiáng)的性能。 ASP.NET 代碼不完全向后兼容 ASP。 ASP.NET 使用新的 ADO.NET。 ASP.NET 支持完整的 Visual Basic,而非 VBScript。 ASP.NET 支持 C# (C sharp) 和 C++。 ASP.NET 支持 JScript,和以前一樣。 ASP.NET 包含大量 HTML 控件。幾乎所有頁(yè)面中的 HTML 元素都能被定義為 ASP.NET 控件,而這些控件都能由腳本控制。 ASP.NET 同時(shí)包含一系列新的面向?qū)ο蟮妮斎肟丶?,比如可編程的列表框和?yàn)證控件。 新的 data grid 控件支持分類、數(shù)據(jù)分頁(yè),以及您對(duì)一個(gè)數(shù)據(jù)集控件所期待的一切。 所有 Web 頁(yè)面上的 ASP.NET 對(duì)象都能夠發(fā)生可被 ASP.NET 代碼處理的事件。 可由代碼處理的加載、點(diǎn)擊和更改事件使得編程更輕松,更有條理。 ASP.NET 組件深入地基于 XML。比如新的 AD Rotator,它使用 XML 來(lái)存儲(chǔ)廣告信息和配置。 ASP.NET 支持基于表單的用戶身份驗(yàn)證,包括 cookie 管理和自動(dòng)的非授權(quán)登錄重定向。 (您仍然能夠定制自己的登陸頁(yè)面和用戶驗(yàn)證程序)。 ASP.NET 允許用戶帳戶和角色,賦予每個(gè)用戶(帶有一個(gè)給定的角色)不同的服務(wù)器代碼訪問權(quán)限。 ASP.NET 在提供更大的可伸縮性方面已有非常多的改善。 服務(wù)器對(duì)服務(wù)器的通信已得到極大的增強(qiáng),這使得在若干個(gè)服務(wù)器上按比例分配一個(gè)應(yīng)用程序成為可能。關(guān)于這一點(diǎn)的一個(gè)例子是,我們有能力在不同的服務(wù)器上運(yùn)行 XML 解析器、XSL 轉(zhuǎn)換,甚至耗費(fèi)資源的 session 對(duì)象。 對(duì)服務(wù)器上 ASP.NET 頁(yè)面的第一個(gè)請(qǐng)求是編譯其 ASP.NET 代碼,并在內(nèi)存中保存一份緩存的備份。這樣做的結(jié)果當(dāng)然極大地提高了性能。 通過(guò)純文本文件就可完成對(duì) ASP.NET 的配置。 配置文件可在應(yīng)用程序運(yùn)行時(shí)進(jìn)行上傳和修改。無(wú)需重起服務(wù)器。也沒有 metabase 和注冊(cè)方面的難題。 不需要重起服務(wù)器來(lái)配置和替換已編譯的代碼。ASP.NET 會(huì)簡(jiǎn)單地把所有新的請(qǐng)求重定向到新的代碼。 ASP.NET 不完全兼容早期的 ASP 版本,所有大部分舊的 ASP 代碼需要進(jìn)行修改才能在 ASP.NET 下運(yùn)行。 為了解決這個(gè)問題,ASP.NET 使用了一個(gè)新的文件后綴 ".aspx"。這樣就使 ASP.NET 應(yīng)用程序與 ASP 應(yīng)用程序能夠一起運(yùn)行在同一個(gè)服務(wù)器上。 一個(gè)簡(jiǎn)單的 ASP.NET 頁(yè)面看上去類似一張普通的 HTML 頁(yè)面。 為了開始我們的 ASP.NET 學(xué)習(xí)之旅,首先我們將構(gòu)造一張簡(jiǎn)單的 HTML 頁(yè)面,這張頁(yè)面將在瀏覽器中顯示 "Hello W3School": 這張 HTML 頁(yè)面的 HTML 代碼: 如果您希望親自試一試,可以把這些代碼保存在名為 "firstpage.html" 的文件中,然后創(chuàng)建一個(gè)到此文件的鏈接,就像這樣:firstpage.html。 把 HTML 頁(yè)面轉(zhuǎn)換為 ASP.NET 的最簡(jiǎn)單的方法是,把這個(gè) HTML 文件拷貝為帶有 .aspx 后綴的新文件。 這些將把我們的例子顯示為一個(gè) ASP.NET 頁(yè)面: 如果您希望親自試一試,請(qǐng)把這些代碼保存在一個(gè)名為 "firstpage.aspx" 的文件中,并創(chuàng)建一個(gè)到此文件的鏈接:firstpage.aspx。 從根本上講,ASP.NET 頁(yè)面與 HTML 完全相同。 HTML 頁(yè)面的擴(kuò)展名是 .htm 或 .html。假如瀏覽器從服務(wù)器請(qǐng)求某張 HTML 頁(yè)面,服務(wù)器不進(jìn)行任何修改,就會(huì)把該頁(yè)面發(fā)往瀏覽器。 ASP.NET 頁(yè)面的擴(kuò)展名是 .aspx。如果瀏覽器請(qǐng)求某張 ASP.NET 頁(yè)面,那么在把結(jié)果發(fā)回瀏覽器之前,服務(wù)器首先會(huì)處理頁(yè)面中的可執(zhí)行代碼。 上面的 ASP.NET 頁(yè)面不包含任何可執(zhí)行的代碼,因此也不會(huì)執(zhí)行任何代碼。在下面的例子中,我們將向頁(yè)面添加一些可執(zhí)行代碼,以便向您演示靜態(tài) HTML 頁(yè)面與動(dòng)態(tài) ASP 頁(yè)面的不同之處。 Active Server Pages (ASP) 已經(jīng)流行很多年了。通過(guò) ASP,可以把可執(zhí)行代碼放置于 HTML 頁(yè)面內(nèi)部。 ASP.NET 之前的 ASP 版本經(jīng)常被稱為經(jīng)典 ASP(Classic ASP)。 ASP.NET 不完全兼容 Classic ASP,但是通過(guò)少量的修改,Classic ASP 可以良好地作為 ASP.NET 進(jìn)行工作。 如果您希望學(xué)習(xí)更多有關(guān) Classic ASP 的知識(shí),請(qǐng)?jiān)L問我們的 ASP 教程。 為了向您演示如何使用動(dòng)態(tài)內(nèi)容顯示頁(yè)面,我們向上面的例子添加了一些可執(zhí)行代碼: <% --%> 標(biāo)簽內(nèi)的代碼在服務(wù)器上執(zhí)行。 Response.Write 是 ASP 代碼,用來(lái)向 HTML 輸出流文本。 Now() 是一個(gè)可返回服務(wù)器當(dāng)前日期和時(shí)間的函數(shù)。 如果您希望親自試一試,可以把這些代碼保存在名為 "dynpage.asp" 的文件中,并創(chuàng)建一個(gè)指向該文件的鏈接:dynpage.asp。 下面的代碼可把我們的例子顯示為一個(gè) ASP.NET 頁(yè)面: 如果您希望親自試一試,請(qǐng)把這些代碼保存在名為 "dynpage.aspx" 的文件中,然后創(chuàng)建到此文件的鏈接:dynpage.aspx。 上面的例子無(wú)法展示出 ASP.NET 與 Classic ASP 之間的不同之處。 正如您在最后的兩個(gè)例子中看到的,在這個(gè)兩個(gè) ASP 和 ASP.NET 頁(yè)面之間,沒有什么不同之處。 在下面的章節(jié),您會(huì)看到,服務(wù)器控件如何使 ASP.NET 比 Classic ASP 更加強(qiáng)大。 服務(wù)器控件是服務(wù)器可以理解的標(biāo)簽。 下面列出的代碼是從上一節(jié)中拷貝的: 上面的代碼能夠反映出 Classic ASP 的局限性:代碼塊必須放置在需要進(jìn)行輸出的位置。 通過(guò) Classic ASP,我們是無(wú)法將可執(zhí)行代碼與 HTML 本身進(jìn)行分離的。這使得頁(yè)面難以閱讀,也難以維護(hù)。 通過(guò)服務(wù)器控件,ASP.NET 已經(jīng)解決了上面所描述的“意大利面條式代碼”的問題。 服務(wù)器控件是可被服務(wù)器理解的標(biāo)簽。 有三種類型的服務(wù)器控件: HTML 服務(wù)器控件是服務(wù)器可理解的 HTML 標(biāo)簽。 ASP.NET 中的 HTML 元素是作為文本來(lái)進(jìn)行處理的。要想使這些元素可編程,就需要向這些 HTML 元素添加runat="server" 屬性。該屬性指示,此元素是一個(gè)服務(wù)器控件。同時(shí)要添加 id 屬性來(lái)標(biāo)識(shí)該服務(wù)器控件。id 引用可用于操作運(yùn)行時(shí)的服務(wù)器控件。 注釋:所有 HTML 服務(wù)器控件必須位于帶有 runat="server" 屬性的 <form> 標(biāo)簽內(nèi)。runat="server" 屬性指示該表單應(yīng)在服務(wù)器進(jìn)行處理。它同時(shí)指示其包括在內(nèi)的控件可被服務(wù)器腳本訪問。 在下面的例子中,我們?cè)?.aspx 文件中聲明了一個(gè) HtmlAnchor 服務(wù)器控件。然后我們?cè)谝粋€(gè)事件句柄中操作該 HtmlAnchor 控件的 HRef 屬性。Page_Load 事件是眾多 ASP.NET 可理解的事件中的一種類型: 注釋:事件句柄(event handler)是一種針對(duì)給定事件執(zhí)行代碼的子例程。 提示:可執(zhí)行代碼本身已被移到 HTML 之外了。 Web 服務(wù)器控件是服務(wù)器可理解的特殊 ASP.NET 標(biāo)簽。 類似 HTML 服務(wù)器控件,Web 服務(wù)器控件也在服務(wù)器上創(chuàng)建,它們同樣需要 runat="server" 屬性以使其生效。不過(guò),Web 服務(wù)器控件沒有必要映射任何已存在的 HTML 元素,它們代表更復(fù)雜的元素。 創(chuàng)建 Web 服務(wù)器控件的語(yǔ)法是: 在下面的例子中,我們?cè)?.aspx 文件中的聲明了一個(gè) Button 服務(wù)器控件。然后我們?yōu)?Click 事件創(chuàng)建了一個(gè)事件句柄,它可修改按鈕上的文本: Validation 服務(wù)器控件用于驗(yàn)證用戶輸入。如果用戶輸入沒有通過(guò)驗(yàn)證,將給用戶顯示一條錯(cuò)誤消息。 每種 validation 控件執(zhí)行一種特定的驗(yàn)證類型(比如驗(yàn)證某個(gè)具體的值或者某個(gè)范圍的值)。 默認(rèn)地,當(dāng)點(diǎn)擊 Button, ImageButton 或 LinkButton 時(shí),頁(yè)面驗(yàn)證才會(huì)被執(zhí)行。您可通過(guò)把 CausesValidation 屬性設(shè)置為 false,來(lái)阻止某個(gè)按鈕控件被點(diǎn)擊時(shí)進(jìn)行驗(yàn)證。 創(chuàng)建 Validation 服務(wù)器控件的語(yǔ)法是: 在下面的例子中,我們?cè)?.aspx 文件中聲明了一個(gè) TextBox 控件,一個(gè) Button 控件,以及一個(gè) RangeValidator 控件。如果驗(yàn)證失敗,文本 "The value must be from 1 to 100!" 將顯示在 RangeValidator 控件中: TIY 事件句柄(event handler)是一種針對(duì)給定事件來(lái)執(zhí)行代碼的子例程。 請(qǐng)看下面的代碼: 上面的代碼什么時(shí)候會(huì)被執(zhí)行?答案是:“我不知道. . .” Page_Load 事件是眾多 ASP.NET 可理解的事件之一。Page_Load 事件會(huì)在頁(yè)面加載時(shí)被觸發(fā),然后 ASP.NET 會(huì)自動(dòng)調(diào)用子例程 Page_Load,并執(zhí)行其中的代碼: 注釋:該 Page_Load 事件不包含對(duì)象引用或事件參數(shù)! TIY Page_Load 子例程會(huì)在頁(yè)面每次加載時(shí)運(yùn)行。如果您僅希望在頁(yè)面第一次加載時(shí)執(zhí)行 Page_Load 子例程中的代碼,您可以使用 Page.IsPostBack 屬性。如果 Page.IsPostBack 屬性為 false,則頁(yè)面第一次被載入,如果為 true,則頁(yè)面?zhèn)骰胤?wù)器(例如,通過(guò)點(diǎn)擊表單上的按鈕): 上面的例子僅在頁(yè)面初次加載時(shí)創(chuàng)建 "The date and time is...." 這條消息。當(dāng)用戶點(diǎn)擊 Submit 按鈕時(shí),submit 子例程將在第二個(gè) label 創(chuàng)建 "Hello World!",但第一個(gè) label 中的日期和時(shí)間不會(huì)改變。 TIYASP 與 ASP.NET 之間的差異
ASP.NET 的新特性
語(yǔ)言支持
ASP.NET 控件
事件驅(qū)動(dòng)的控件
ASP.NET 組件
用戶身份驗(yàn)證
User 帳戶和角色
高可伸縮性
編譯代碼
易于配置
易于開發(fā)
兼容性
ASP.NET - Web 頁(yè)面
Hello W3School
用 HTML 編寫的 Hello W3School
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3School!</h2>
</center>
</body>
</html>
用 ASP.NET 編寫的 Hello W3School
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3School!</h2>
</center>
</body>
</html>
它如何工作?
經(jīng)典的 ASP
用 Classic ASP 編寫的動(dòng)態(tài)頁(yè)面
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3School!</h2>
<p>
<%Response.Write(now())%>
</p>
</center>
</body>
</html>用 ASP .NET 編寫的動(dòng)態(tài)頁(yè)面
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3School!</h2>
<p>
<%Response.Write(now())%>
</p>
</center>
</body>
</html>ASP.NET vs Classic ASP
Classic ASP 的局限性
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3School!</h2>
<p>
<%Response.Write(now())%>
</p>
</center>
</body>
</html>ASP.NET - 服務(wù)器控件
ASP.NET - HTML 服務(wù)器控件
<script runat="server">
Sub Page_Load
link1.
End Sub
</script>
<html>
<body>
<form runat="server">
<a id="link1" runat="server">Visit W3School!</a>
</form>
</body>
</html>
ASP.NET - Web 服務(wù)器控件
<asp:control_name id="some_id" runat="server" />
<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 服務(wù)器控件
<asp:control_name id="some_id" runat="server" />
<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:RangeValidator
ControlToValidate="tbox1"
MinimumValue="1"
MaximumValue="100"
Type="Integer"
Text="The value must be from 1 to 100!"
runat="server" />
</p>
</form>
</body>
</html>
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 事件
<script runat="server">
Sub Page_Load
lbl1.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.IsPostBack 屬性
<script runat="server">
Sub Page_Load
if Not Page.IsPostBack then
lbl1.Text="The date and time is " & now()
end if
End Sub
Sub 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>
聯(lián)系客服