我們先來解釋一下解決這一問題的方法,然后再詳細地解釋所使用的代碼。在.net中開發(fā)web應(yīng)用程序,我們既可以使用服務(wù)器端的web控件(web表單)也可以使用html控件。使用.net開發(fā)web應(yīng)用程序的重點是服務(wù)器端控件。我們在本文中就使用了web表單服務(wù)器端控件。
panel是一個服務(wù)器端的web表單控件,一個panel控件就是html網(wǎng)頁上的一個矩形區(qū)域,它是否可見可以在服務(wù)器端進行控制。因此,首先,我們可以從將html代碼段放在一個panel控件中,html代碼段可以由服務(wù)器端控件和客戶端控件組成。一旦我們將panel控件的visibility屬性設(shè)置為“false”,則整個html代碼段就成為不可見的了。其次,我們可以使用名字為linkbutton的另一個web表單控件,它本質(zhì)上是一個超級鏈接,但通過服務(wù)器端的onclick方法,它可以起到按鈕的作用。在這種方法中,我們只要簡單地訪問panel對象的c#語言表示,并將其visibility屬性設(shè)置為true或false,網(wǎng)頁就會自動地刷新自己。
在.net中開發(fā)web應(yīng)用程序的一個重要差別是,網(wǎng)頁上的每個控件都被表示為服務(wù)器端的一個.net對象,而且這些對象(控件)的狀態(tài)通過與服務(wù)器間的多次交互來維護,這就使我們能夠?qū)Ψ?wù)器端和客戶端的事件作出反應(yīng)。響應(yīng)服務(wù)器端的事件時,百網(wǎng)頁重新刷新時,其內(nèi)部的所有對象(控件)也都會得到刷新。我們無需再繪制任何控件,這一切都是自動完成的。這種方法最有吸引力的是一個好的面向?qū)ο缶幊倘藛T能夠在一種編程語言模式中工作,而且可以方便地使用javascript,調(diào)試也非常簡便。這種方法的一個小問題就是它不能使用frontpage或dreamweaver等html代碼編輯器。一旦這個問題得到了解決,服務(wù)器端的編程模式就更完善了。
  下面是編寫本文中例子代碼所需要的步驟:
  ·為html代碼段獲得panel控件。 
  ·將html代碼置入panel控件中。 
  ·創(chuàng)建一個linkbutton控件。 
  ·提供一個onclick函數(shù)。 
  ·在按鈕的點擊函數(shù)中隱藏/顯示panel控件。 
  1、為html代碼段獲得panel控件 
  打開網(wǎng)頁(.aspx)的設(shè)計視圖,并選擇“webforms控件”工具箱,從工具箱中拖出一個panel控件到html網(wǎng)頁的設(shè)計視圖上。這時就會看到一個矩形框,發(fā)改變它的大小,直到能夠容下你想輸入的html代碼段。
  下面是html設(shè)計視圖中panel控件的定義: 
| <table cellspacing=0 cellpadding=0 width=600 bgcolor=#ffffff border=0> | 
| <?xml:namespace prefix = asp /> <asp:panel id=testpanel width="398px" height="171px" runat="server"> html goes here </asp:panel> </table> | 
  2、將我們的html代碼輸入到panel控件中 
  在panel控件中編寫相關(guān)的html代碼(或?qū)tml代碼拖到panel控件中),下面是一個例子: 
| <asp:panel id=testpanel width="398px" height="171px" runat="server"> <h2>an example html segment that is going to disappear </h2> an example drop down<asp:dropdownlist id=adropdownlistbox runat="server"> </asp:dropdownlist> </asp:panel> | 
  3、創(chuàng)建一個linkbutton控件 
  我們需要對這一部分作一些解釋。我們?yōu)槭裁磿胠inkbutton控件取代一個超級鏈接呢?超級鏈接意味著我們可以隨意到包括當前的網(wǎng)頁在內(nèi)的任意網(wǎng)頁上,但并不意味著我們要返回正在修改的網(wǎng)頁。另外,也沒有象onclick這樣能夠處理超級鏈接的服務(wù)器端方法。 
   linkbutton的外觀和風(fēng)格與hyperlink相同,但它還有另外二點好處,即: 
  ·點擊時能夠返回同一個網(wǎng)頁。 
  ·便于使用的onclick方法。 
  下面是一個linkbutton控件定義的例子: 
| <asp:linkbutton id=changeappearancebutton runat="server"> change appearance </asp:linkbutton> | 
  4、提供onclick函數(shù) 
  如果雙擊linkbutton控件,ide就會自動地將我們引到服務(wù)器端該控件的onclick方法處,在這里我們就可以編寫隱藏panel控件的代碼。 
  5、在按鈕的onclick方法中隱藏/顯示panel控件 
  下面是onclick方法的一個例子: 
| private void changeappearancebutton_click(object sender, system.eventargs e) { this.testpanel.visible = this.testpanel.visible ? false : true; } | 
  上面的代碼是一個極好的知道如何維護自己狀態(tài)的用品端編程模式的例子。當用戶點擊鏈接時,就會執(zhí)行上面的代碼,但開發(fā)人員并沒有改變html網(wǎng)頁的其他部分,控件本身知道如何刷新它們自己。 
  結(jié)論 
  下面是我從.net模式中精選出來的非常有趣的特性: 
  ·服務(wù)器端編程模式。 
  ·web表單的狀態(tài)是自動維護的。 
  ·高度一致的前、后端統(tǒng)一對象編程模式。 
  ·用處很大的ide能夠提示每個方法和可能的參數(shù)。 
  ·在網(wǎng)頁的html視圖中編寫xml代碼也有提示。 
  ·配置所需要的統(tǒng)一的web.config。 
  盡管本文中的例子相當簡單,即使使用傳統(tǒng)的方法也能夠非常簡單地實現(xiàn),但這種服務(wù)器端的編程模式說明了net的一個有趣的特性,即能夠自動維護其狀態(tài)的一致的統(tǒng)一服務(wù)器端編程模式。
新聞熱點
疑難解答
圖片精選