ASP.NET開發相關技術簡介
大約有將近一百萬名開發人員使用了.NET Framework的第一個版本來開發網站。所以在2003年的夏天,當從Microsoft傳出將有新版本發布的傳聞時,許多人的耳朵都豎了起來,這個新的版本將使得創建ASP.NET頁面所需的代碼行數減少70%。像這樣大規模的提高生產效率在程序設計中是不多見的。當ASP.NET 2.0的代碼樣例在2003年秋的Microsoft專業開發人員大會(Microsoft Professional Developer’s Conference)上演示時,結果比預計的還要好。以前使用ASP.NET的第一個版本程序員需要花費幾個小時才能做出的頁面,現在使用ASP.NET 2.0只需要幾分鐘就完成了。簡單來說,在.NET Framework 2.0最終版本發布之后,任何繼續使用第一個版本創建ASP.NET頁面的程序人員都將花費大量的額外時間才能達到相同的結果。
也許就像其他任何領域一樣,ASP.NET開發提供的優勢是能夠方便地將數據集成進頁面。程序員不再需要知道詳細的連接、命令以及數據閱讀器和數據適配器對象,就能執行普通數據任務了。對于初學者掌握能力,ASP.NET 2.0使得基本數據的使用簡單易學,并且有能力進行更復雜的數據應用。
.NET Framework
Microsoft開發出了作為基本原理的.NET和一系列技術,用于在互聯網中讓計算機共同工作。總的目標就是讓信息和進程在大范圍的系統和設備之間順暢地交流。.NET不是一種語言,也不是一個特別的產品。更確切地說,它是一套標準和規范,并已經應用于自2002年以來Microsoft發布的所有產品中。
.NET包含了一種使用開放標準的XML格式交換信息的標準化格式??蓴U展標記語言(Extensible Markup Language,XML)不需要請求者具備任何有關數據存儲如何保存信息的專門知識—— 數據都以自描述的XML格式取出。同樣地,目前幾乎所有的數據存儲都可以用XML來提供信息,這對于所有.NET數據客戶都具有吸引力。
.NET支持軟件的Web Services標準,可請求在使用了開放平臺標準的簡單對象訪問協議(Simple Object Access Protocol,SOAP)和XML的遠程軟件上運行代碼。.NET網站可以從另外一個網站上找到該網站所提供的服務,并使用這些服務。這樣可以使得網站從其他的網站上獲得HTML、計算后的結果或者數據集。
作為.NET開端的一部分,Microsoft發布了一套運行時編程工具和應用編程接口(API),稱為.NET Framework,讓開發團隊能夠創建.NET應用程序和XML Web Services。.NET Framework由公共語言運行庫(Common Language Runtime,CLR)和一套統一的類庫組成。
CLR為運行的應用程序提供了一個完全管理的執行環境,其中包括幾個服務,例如程序集裝載和卸載、進程和內存的管理、安全實施以及即時編譯等。CLR名稱的意思就是指能夠用多種語言編寫應用程序,并且將源代碼編譯成CLR能夠讀懂并運行的中間語言,而無需考慮原來所使用的語言。這種“語言獨立性”就是CLR的關鍵特性(也是ASP.NET的特性),它允許開發人員使用自己喜歡的語言工作,比如C#、VB或者Cobol,都能夠獲得.NET Framework的常用特性。
.NET Framework還包括了一套類庫,這套類庫提供了每一個應用程序所需的常用功能??梢允褂?NET Framework支持的任何語言來訪問這些類庫。由這些類庫提供的服務(以及相應的命名空間)如下:
· 基本類型(System)
· 輸入/輸出(System.IO)
· 數據訪問(System.Data)
· 安全(System.Security)
· 數據結構(System.Collections)
· 配置(System.Configuration)
· 連網(System.Net)
· 反射(System.Reflection)
· 全球化(System.Globalization)
· 繪畫和制圖(System.Drawing)
· 跟蹤和診斷(System.Diagnostics)
· 窗口(客戶端)應用程序模型(System.Windows.Forms)
· Web應用程序模型(System.Web)
注意,.NET Framework包含了兩個應用程序編程模型,一個用于客戶端應用程序(System.Windows.Forms),另一個用于基于Web的應用程序(System.Web)。本書著重講解后一個模型。.NET Framework中的System.Web命名空間是.NET Framework的一部分,它提供了ASP.NET功能。換句話說,ASP.NET就是構建應用程序的所有.NET Framework的一部分。
ASP.NET開發
ASP.NET是一種用于創建基于Web的應用程序的編程模型。從本質上來說,運行時和.NET Framework類庫集可以用于創建動態Web頁。它需要在Web服務器的環境中運行,例如Microsoft Internet Information Server(Microsoft互聯網信息服務器,IIS),并且根據服務瀏覽器請求指示在服務器上執行程序。與直接由Web服務器提供的靜態HTML不同的是,ASP.NET頁面實際上是在服務器上執行以后再產生結果的。頁面的最后生成也許是由許多不同的指令和/或數據源構造的。
ASP.NET頁面以.aspx擴展名存儲。頁面由程序員將文本、標記(例如HTML)以及ASP.NET特定服務器標記和腳本組合在一起,然后存儲在Web服務器上??梢詫⒋鎯蟮腁SP.NET頁面看成是一套描述如何創建一個HTML頁面的指令。當該頁面被請求瀏覽時,服務器端程序將會用純標記來創建一個客戶端瀏覽器可以讀懂并能呈現(render)的頁面。因為呈現后的輸出是純標記,所以任何瀏覽器都能夠讀懂;所有的動態過程都發生在Web服務器端。ASP.NET特定服務器標記非常強大,例如,它可以對用戶的動作作出反應,連接至數據存儲以及自動創建非常復雜的HTML結構。
正像前面提到的那樣,ASP.NET只是.NET Framework的一部分,所以 ASP.NET頁面可以利用這個框架提供的所有服務,包括連網、數據訪問、安全以及更多其他服務。因為ASP.NET可以使用所有這些服務,所以相比以前,能夠創建更加豐富的Web應用程序。只需花少量的時間來構建所有應用程序所需的構建塊,而將大多數時間用在應用程序獨有的特殊邏輯上。
ASP.NET開發還可以在Web編程中引入了一些獨特的新技術,可以在典型的動態服務器頁面(Active Server Pages,ASP)上極大地改善開發模式:
· 語言獨立性——因為ASP.NET是.NET Framework的一部分,所以可以使用您自己選擇的語言來構建ASP.NET應用程序,例如C#、VB或J#。而典型的ASP則僅限于JScript或者VBScript頁面。
· 編譯而不是解釋——與典型的ASP在每一次頁面請求時都解釋編程結構不同,ASP.NET在服務器端動態地將頁面編譯成可以運行得非常快的本機編程指令??梢院苊黠@地看到典型的ASP頁面的性能與相同ASP.NET頁面的性能之間相差的數量級別。
· 事件驅動編程模式——在典型的ASP中,頁面總是以自頂向下的線性方式執行,并且HTML標記常常與程序指令混合在一起。任何一個有一定ASP經驗的人都知道這樣會使得頁面難以閱讀,甚至更加難以維護。ASP.NET引入了事件驅動模型,這個模型允許您將代碼與標記內容分離,將代碼并入處理專門任務的有意義的單元中,例如響應客戶端的按鈕單擊動作。這個類似VB的事件模型極大地提高了頁面的可讀性和可維護性。
· 服務器控件——典型的ASP需要動態地將HTML片斷代碼接合在一起呈現,這樣做的結果就是在應用程序中一遍又一遍地編寫相同的代碼(您需要多少次才能從數據庫查詢中構建一張表格)。ASP.NET帶給Web編程的一個最大的好處就是能夠將公共的呈現和行為封裝成服務器控件(server control),可以在應用程序中很方便地重復使用。就像HTML標記一樣,服務器控件以聲明的形式創建,但是表現為一個位于服務器端的可編程對象,它可以與代碼進行交互并輸出定制的動態HTML呈現。ASP.NET包含了大約80多個服務器控件,這些控件封裝了從標準表單元素到復雜控件(如網格和菜單)的所有內容。
· 控件設計時間的改善(當使用Visual Web Developer時)—— 開發人員通過使用設計時間界面可以減少花費在開發復雜頁面上的時間,這些界面包括敏捷任務面板、標簽級導航欄和可以設置控件屬性的向導。
#p#
ASP.NET開發技術的第一個版本(1.0和1.1)在2001年至2003年間迅速風靡了Microsoft的開發陣營。程序人員很快便感覺到他們通過使用強大和靈活的.NET Framework可以大大減少編碼時間,而且CIO們也看到當程序員花在解決客戶代碼的疑難問題上的時間減少時,他們就可以將更多的資源投入到更高級的IT結構的改善上。ASP.NET確實是一個里程碑式的版本,它簡化了開發人員的工作。
但是,就在第一個版本發布之前,Microsoft的ASP.NET小組就已經在為開發ASP.NET 2.0而工作了。他們以下面雄心勃勃的目標來開始他們的工作:
· 使創建一個典型的Web應用程序所需代碼行數減少70%。
· 提供一套可擴展的應用程序服務,用來為通用應用程序任務提供構建塊,例如成員、角色、個人化以及導航等。
· 創建一系列基于任務的服務器控件,這些控件可以調節上述服務,交付完全、可定制的用戶接口(UI),以最小的代碼量來展示這些服務。
· 當與.NET Framework協同工作提供頁面服務時,改善IIS的性能。
· 提供管理功能,以便加強ASP.NET服務器的部署、管理和運行。
· 改善宿主公司所用的工具,以便可以支持多站點并能夠將開發人員的項目遷移至公共部署環境。
· 讓ASP.NET的幾乎所有特性都能夠方便地擴展或者用定制的高級任務的執行替換。 在這里,我們有必要再來細細地回想一下第一個目標,也就是使編寫一個動態Web應用程序所需的代碼量減少70%。這有可能嗎?Microsoft的ASP.NET小組已經仔細考慮過各種以定制代碼執行的通用任務,并且專門制定了將這些任務封裝進構建塊(特別是服務器控件)的方式,這樣就能夠自動地完成這些任務了。例如,大多數Web應用程序都需要安全或者導航或者個性化服務來為用戶提供定制的體驗。在ASP.NET 2.0中,這些任務是通過一系列可配置的應用程序服務,以及與這些應用程序服務進行對話的服務器控件來實現的,這樣可以極大地減少實施這些通用服務所需的應用程序的代碼量。但是,在所有這些通用任務當中,有一個任務是絕對獨立于其他應用程序的,這就是數據訪問服務。數據是驅動所有動態Web應用程序的公用線程,所以毫不奇怪,ASP.NET小組為了減少代碼量和在ASP.NET 2.0的應用程序中執行數據訪問所需的概念,而制訂了一些大膽的目標:
· 在ASP.NET開發中可以通過聲明的(無代碼)方式來定義一個數據源。
· 可以通過聲明的(無代碼)方式用UI控件顯示數據,無需在頁面的執行生存期中的特定時間進行顯式的數據綁定。
· 可以通過聲明的(無代碼)方式執行通用數據任務,例如排序、分頁、過濾、更新、插入以及刪除數據。
· 可以使用多種UI控件來顯示數據,包括靈活的網格/詳細控件,該控件既可以顯示又可以操作數據。
· 為創建定制的數據源,啟用可擴展的模型來支持新的數據類型。
ASP.NET 2.0具有一些程序員可以使用的特定的服務器控件,用于在頁面上添加數據交互。這些專門的數據控件分為兩組:數據源控件和數據綁定控件。數據源控件創建與數據庫的鏈接。數據綁定控件則從數據源控件獲取信息,并在頁面上創建呈現。這種簡單的雙控件模式可用于多種情況。對于多種數據庫類型,甚至是非關系型數據源,都有相應的數據源控件。同樣地,有多種數據綁定控件可用來在頁面上生成表格、樹型、列表以及其他數據格式。在前面我們已對ASP.NET進行了介紹,同時講述了ASP.NET的一些理論,現在開始介紹本書剩余部分的細節內容:數據源控件和數據綁定控件的使用。數據源控件以及附帶產品包括如下條目:
· SqlDataSource控件,用于與Microsoft SQL Server和其他數據庫進行連接
· AccessDataSource控件,用于與MDB文件連接
· ObjectDataSource控件,用于與中間層對象連接
· XMLDataSource控件,用于XML文件或者數據流
· SiteMapDataSource控件,用于以ASP.NET 2.0站點地圖格式存儲的XML文件額外的控件已經由第三方開發。
在數據綁定控件中,有很多與ASP.NET 1.x中的相似,有一些則是ASP.NET 2.0全新開發的:
· ListBox、DropDownList和BulletedList、CheckBoxList、RadioButtonList
· AdRotator是實現舊功能的數據綁定控件
· DataList和Repeater以靈活的布局方式提供數據
· DataGrid(與ASP.NET 1.x中的相同)和GridView(第2個版本中的新控件)用于表格數據
· DetailsView和FormView以輕松的導航提供記錄的信息
· TreeView用于顯示分級數據
總之,數據源控件和數據綁定控件將會是本書重點介紹的對象。
在.NET Framework 2.0公開beta版本發布之前,少數的幾個程序組就已經被允許查看工作代碼,并希望盡快獲得他們的反饋。結果,所有的反應只有一個,那就是熱烈,“太好了!”然后就是“什么時候我才能用ASP.NET 2.0替換我的ASP.NET 1.x應用程序?”。現在beta發布版本已經在手邊,我們無需再等待了。
ADO.NET
ADO.NET是.NET Framework中的一套類庫,它將會讓您更加方便地在應用程序中使用數據。Microsoft收集了過去幾十年中最佳的數據連接的實踐操作,并編寫代碼實現這些實踐。這些代碼被包裝進了一些對象中,以便其他軟件可以方便地使用。
ADO.NET中的代碼處理了大量的數據庫特有的復雜情況,所以當ASP.NET頁面設計人員想讀取或者寫入數據時,他們只需編寫少量的代碼,并且這些代碼都是標準化的。就像ASP.NET一樣,ADO.NET不是一種語言。它是對象(類)的集合,在對象(類)中包含了由Microsoft編寫的代碼??梢允褂弥T如Visual Basic或者C#等編程語言來在對象外部運行這些代碼。
可以將ADO.NET看作是一個介于數據源和數據使用者之間的非常靈巧的轉換層。ADO.NET可以接受數據使用者語言中的命令,然后將這些命令轉換成在數據源中可以正確執行任務的命令。但是,就像您將會看到的那樣,ASP.NET 2.0提供了服務器端數據控件,可以更方便地與ADO.NET交互工作,所以有的時候這基本上減少了直接使用ADO.NET對象的需求。
#p#
很多讀者已經有使用ASP.NET早期版本的經驗了。這一小節將回顧一下這種模式,目的是演示您需要通過ADO.NET對象將數據引入Web頁中的這一過程。對那些從來都沒有使用過早期版本的讀者來說,可以將本小節作為一個新奇的故事,類似于在發現乙醚之前進行的外科技術研究。在以前,創建一個簡單典型的ASP.NET 1.x版本的頁面需要如下代碼:
- 〈script runat="server" 〉
- Sub Page_Load(ByVal sender As Object,
- ByVal e As System.EventArgs)
- BulletedList1.DataSource = GetAuthorsByState("CA")
- BulletedList1.DataBind()
- End Sub
- Shared Function GetAuthorsByState
- (ByVal state As String) As System.Data.DataSet
- Dim connectionString As String =
- "server=(local); database=pubs;
- trusted_connection=true"
- Dim dbConnection As System.Data.IDbConnection =
- New System.Data.SqlClient.
- SqlConnection(connectionString)
- Dim queryString As String =
- "SELECT [authors].[au_id], [authors].[au_fname],
- [authors].[au_lname], [authors].
- [state] FROM [authors] WHERE
- ([authors].[state] = @state)"
- Dim dbCommand As System.Data.IDbCommand =
- New System.Data.SqlClient.SqlCommand
- dbCommand.CommandText = queryString
- dbCommand.Connection = dbConnection
- Dim dbParam_state As System.Data.IDataParameter =
- New System.Data.SqlClient.SqlParameter
- dbParam_state.ParameterName = "@state"
- dbParam_state.Value = state
- dbParam_state.DbType = System.Data.DbType.
- StringFixedLength
- dbCommand.Parameters.Add(dbParam_state)
- Dim dataAdapter As System.Data.IDbDataAdapter =
- New System.Data.SqlClient.SqlDataAdapter
- dataAdapter.SelectCommand = dbCommand
- Dim dataSet As System.Data.DataSet =
- New System.Data.DataSet
- dataAdapter.Fill(dataSet)
- Return dataSet
- End Function
- 〈/script 〉
- 〈html 〉〈head runat="server" 〉
- 〈title 〉Untitled Page/title 〉〈/head 〉
- 〈body 〉
- 〈form id="form1" runat="server" 〉〈div 〉
- 〈asp:BulletedList ID="BulletedList1"
- DataTextField= "au_lname" Runat="server" / 〉
- 〈/div 〉〈/form 〉
- 〈/body 〉〈/html 〉
以上示例對數據庫執行了一條簡單的SQL SELECT語句,并將結果與一個BulletedList控件綁定。頁面中有一個名為GetAuthorsByState的方法,該方法創建了用來完成這個任務的幾個ADO.NET對象:
· SqlConnection對象表示與數據庫服務器進行連接
· SqlCommand對象表示要執行的SQL SELECT命令
· SqlParameter對象代表了一個將被命令中的標記代替的值
· SqlDataAdapter表示填充命令中的DataSet對象的能力
· DataSet表示命令結果,可以與BulletedList進行綁定
在Page_Load事件中,調用GetAuthorsByState方法并生成DateSet結果,然后將這個結果賦給BulletedList的DataSource屬性。接著,調用DataBind()使得BulletedList用這個數據結果將自己同步。我們在頁面執行生存期中的適當的時候調用DataBind(),這樣的做法是ASP.NET 2.0在一般情況下尋找并消除的一個關鍵步驟。實際上,在大多數情況下, ASP.NET 2.0根本不需要與ADO.NET進行交互操作。但是,理解上述ADO.NET對象之間的關系是非常有用的,這樣我們就可以討論 ASP.NET 2.0是如何改進這個模式的。
ASP.NET 2.0和數據訪問
ASP.NET 2.0給我們提供了一個改良的數據訪問模式,這個模式減少了在 ASP.NET 1.x中執行數據綁定所需的代碼量。首先,無需編程實現實例化、設置屬性以及調用前述列表中的ADO對象的方法。您需要做的就是在頁面上簡單地添加服務器端控件并設置屬性。當呈現頁面時,ASP.NET 2.0將會自動地執行所有的對象實例化,并調用方法創建并顯示數據。請將以下ASP.NET 2.0代碼與上面的代碼進行對比:
- 〈html 〉
- 〈head runat="server" 〉
- 〈title 〉Demo〈/title 〉〈/head 〉
- 〈body 〉
- 〈form id="form1" runat="server" 〉
- 〈asp:SqlDataSource ID="SqlDataSource1"
- Runat="server" SelectCommand="SELECT
- au_lname FROM authors WHERE (state = @state)"
- ConnectionString="Server=HPSERV;
- Integrated Security=True;Database=pubs" 〉
- 〈SelectParameters 〉
- 〈asp:Parameter Type="String"
- DefaultValue="CA" Name="state" / 〉
- 〈/SelectParameters 〉
- 〈/asp:SqlDataSource 〉
- 〈asp:BulletedList ID="BulletedList1"
- runat="server" DataSourceID="SqlDataSource1"
- DataTextField="Au_lname" 〉
- 〈/asp:BulletedList 〉
- 〈/form 〉
- 〈/body 〉〈/html 〉
#p#
第二個改進來自于對在頁面生存期中的事件敏感的服務器端控件。ASP.NET 2.0 服務器端控件能夠在正確的時間做出正確的動作。請注意在ASP.NET 2.0頁面中對頁面生存期中的事件的任何引用。ASP早期版本的學生一般都會對在頁面生存期中執行多種任務感到迷惑,特別是數據綁定。因此,很多ASP.NET 1.x頁面都會有這樣的讓程序員編寫代碼的遭遇,即在錯誤的事件下調用DataBind,或者在多個事件中多次調用DataBind。這些定時操作現在都可以通過ASP.NET 2.0的服務器端數據控件來自動完成。
請注意在前面的ASP.NET 2.0的代碼中使用了兩個服務器端控件。第一個是數據源控件,本例中是SqlDataSource控件。該控件在后臺建立了所有顯示數據所需的ADO連接對象,包括Connection、Command以及DataReader或者Dataset對象。然后,使用了一個名為BulletedList的數據綁定控件,用來獲取數據源控件的數據,并在頁面上呈現。
術語
在完成介紹性內容之前,我將提供一個到目前為止所用到的術語表。
· 動態Web頁—— 作為代碼存儲在Web服務器上的文件,當被請求時,可轉換為HTML。當頁面被轉換時,他們可以根據用戶和網站擁有者的實時情況而按照不同的請求來獲取不同的表單。
· IIS—— 在Windows中內置的Web服務器,用于通過TCP/IP向請求者提供Web頁。運行于Windows 2000或者Windows XP Professional上的IIS可以使用.NET Framework類來提供ASP.NET Web頁。
· .NET Framework—— 一組包含Microsoft編寫的代碼的類,可以使得開發應用程序更加方便和快捷,并且更易于在互聯網上運行。很多類都已經被封裝進能夠啟用.NET 的大約十多個Microsoft產品當中了。 sflj www.it55.com kg^&fgd
· CLR(公共語言運行庫)—— .NET Framework的一項特性,可以讓編程人員用多種語言編寫代碼,然后將代碼編譯成可用來部署的單獨、統一的語言。
· ASP.NET—— .NET Framework中的運行時和類庫集,用來創建動態Web應用程序。
· 數據存儲—— 數據被存放和管理的地方。所有的RDBMS都可用于數據存儲,但是有些數據存儲就不是RDBMS,因為它們不是關系型的。
· 數據庫或關系型數據庫管理系統(RDMS)—— 一種可以讀取和操縱數據的軟件。大多數系統包含了用來設計和測試數據庫的工具,以及優化過程的工具。一個RDBMS必須按照標準化形式(關系型格式)存儲數據。
· DataBase模式(或數據庫元數據)—— 數據庫結構,包括表和關系的設計。該模式不包括實際的數據值。
· MicrosoftTM Access—— 一種基于MDB文件格式、JET引擎以及一系列用于創建和使用數據庫的工具的RDMS。Access價格便宜,容易學習,能被廣泛接受并且已經被部署到很多機器上。但是,它不支持太多的并發用戶。
· JET—— 運行在后臺并使用MDB(Access)文件的數據庫引擎。JET可以直接從其他軟件(例如.NET或Access)接受命令來讀取或者修改MDB文件。
· 結構化查詢語言(Structured Query Language,SQL)—— 一種被數據使用者用來從數據提供程序那里請求讀取或者寫入數據的語言。經過近十年的發展,SQL已經成為與RDBMS通信的標準。
· MicrosoftTM SQL Server—— 一種企業級的RDBMS,可以支持大量的數據和大量的并發用戶。
· MicrosoftTM SQL Server Express(SSE)—— 基于Microsoft SQL Server數據庫引擎的可免費獲得的數據庫引擎。與SQL Server不同的是,SSE能提供的同時數據連接數量有限,并且只有少數幾個功能。本書將在大多數示例中使用SSE。
· MicrosoftTM Data Engine(MSDE)—— 與SSE類似,但是基于SQL Server引擎的早期版本。MSDE將在本書的練習中使用。
· XML—— 一種標準的數據格式,每個值都被存儲并描述。XML不是非常有效率(用于描述的空間通常會超過數據的大小),但是卻能被很多不同的數據管理系統方便地讀取。
· Web頁編輯器—— 一種允許打開和修改頁面的軟件。最常用的編輯器是記事本。Visual Studio、Visual Web Developer和ASP.NET Web Matrix與其他工具打包成一個編輯器,用以提高效率。 · 集成開發環境(Integrated Development Environment,IDE)—— 一套用來幫助編程人員開發代碼的工具。Visual Studio就是一個非常強大的IDE;Web ASP.NET Web Matrix也提供了很多工具。典型的IDE應當包含一個Web頁編輯器。
· ADO.NET—— 由Microsoft編寫的類(代碼)的集合,作為數據存儲(例如Access或者XML文件)和數據使用者(例如ASP頁面)之間的中間件。
· 連接—— 一個ADO對象,表示數據使用者和數據提供程序之間的惟一路徑。
· 命令—— 一個ADO對象,表示一條可以被傳遞給數據庫的SQL語句。
· 參數—— 一個ADO對象,表示在語句進入數據庫之前可以被插入Common Object(SQL語句)中的多個數據。
· DataSet—— 一個ADO對象,表示集成至記錄或字段中的一組數據。
· 服務器控件—— 一組獨立的代碼(一個對象),用于在服務器上執行任務,生成兼容HTML的并且發送至瀏覽器的頁面。通過ViewState,服務器端控件可以維持其狀態。
· 數據源控件—— 一種服務器端控件,可以創建專門的、惟一的數據庫連接。它提供了ADO對象的一種抽象并且使得編寫ASP.NET 2.0頁面更加快速和容易。數據源控件可用于Microsoft SQL Server、Access、XML以及其他數據源。
· 數據綁定控件—— 一種服務器端控件,可以從數據源控件中獲得數據并在頁面上呈現它。數據綁定控件將程序員從編寫諸如〈 table 〉的HTML標記中解脫出來。數據綁定控件可用于呈現表格、列表、樹型以及其他結構。
【編輯推薦】