今天就跟大家聊聊有關(guān)ASP.NET中如何使用 ListBox控件,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司是專業(yè)的賓川網(wǎng)站建設(shè)公司,賓川接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行賓川網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
在ListMover控件中,JavaScript代碼將把項(xiàng)從一個列表移動到另一個列表。其最終結(jié)果是一樣的,但是不需要進(jìn)行服務(wù)器來回傳送,因?yàn)椴恍枰|發(fā)任何回寄。這樣以來,你就可以解決即時響應(yīng)和不需要回饋的問題。
ASP.net在服務(wù)器端生成內(nèi)容與在客戶端生成內(nèi)容之間有明顯的界定。事實(shí)上,大部分情況下,這兩部分沒有關(guān)系;因此,問題出現(xiàn)了。其實(shí),一個Web控件只是一個服務(wù)器端組件,它負(fù)責(zé)把HTML生成到瀏覽器端。的確,標(biāo)準(zhǔn)ASP.NET ListBox控件正是以HTML形式生成一個ListBox(作為一個< select>標(biāo)簽)。
在< select>標(biāo)簽中的< option>子標(biāo)簽可以使用ListBox控件中的Item屬性的內(nèi)容來創(chuàng)建。Item屬性在服務(wù)器端被填充,而其內(nèi)容有助于在生成期間構(gòu)建適當(dāng)?shù)腍TML。這非常類似于生成一個< input>標(biāo)簽的文本框Web控件,而它的Text屬性映射到< input>標(biāo)簽的Value屬性。每當(dāng)觸發(fā)一個到服務(wù)器的頁面回寄時,ListBox控件的Item屬性都被保存到ViewState中,并且在重新生成頁面前從ViewState中進(jìn)行重建。
在EnhancedListBox中進(jìn)行重排序或在服務(wù)器端的ListMover中移動項(xiàng)都非常直接,并且允許支持正常的內(nèi)置的ViewState機(jī)制而不需要我們作任何干擾。但是,當(dāng)你使用客戶端JavaScript添加這一能力來實(shí)現(xiàn)它們的功能時,它將破壞ViewState。這些控件并不再轉(zhuǎn)回到服務(wù)器端,所以Item集合屬性永遠(yuǎn)不會被保存以便在重新生成時被重載。代之的是,直接在HTML級別上存取生成的< select>標(biāo)簽中的< option>項(xiàng)。你可以借助JavaScript代碼移動或重排序控件項(xiàng);但是,當(dāng)在頁面上再次發(fā)生回寄時,你猜發(fā)生了什么?在移動(或重排序)開始前,控件的列表項(xiàng)就恢復(fù)它們的狀態(tài)。
我說過,如果功能發(fā)生在回寄期間的服務(wù)器端,那么,ViewState被保存并且被良好重載,從而使Item集合正確填充。但是,既然你的最終目標(biāo)是在客戶端實(shí)現(xiàn)這個功能,那么你就不再需要重新調(diào)整Item屬性的內(nèi)容,而是由你依賴的這個屬性負(fù)責(zé)狀態(tài)存儲?,F(xiàn)在,你可能會為難了。但是別擔(dān)心—我有一個解決方案。現(xiàn)在,讓我們開始使用必要的客戶端腳本代碼來開發(fā)該控件來實(shí)現(xiàn)每一個子控件所需要的功能。然后,我將向你展示如何使它與服務(wù)器代碼保持重新同步。
在這個控件中,你要把兩部分內(nèi)容添加到現(xiàn)有ASP.NET ListBox控件。首先,添加一個頭部—把一個標(biāo)簽放到一個ListBox的上方。然后,把兩個按鈕添加到ListBox—分別用于向下和向上重排序。
注意 為了簡單起見,我在后面所有的代碼描述中省略所有的屬性部分。
現(xiàn)在,創(chuàng)建一個繼承自ListBox控件的新類,如下所示:
using System.Web.UI; using System.Web.UI.WebControls; public class EnhancedListBox : ListBox {}
如果你編譯這部分代碼并且把該控件添加到你的工具箱中,那么你將有一個完整功能的ASP.NET ListBox控件副本。我把這個控件作為一個繼承控件開發(fā),是因?yàn)槲蚁胧顾哂幸粋€ASP.NET ListBox控件的“占位符”的作用。以后,我再添加其它的屬性以實(shí)現(xiàn)頭部的可見性并支持重排序按鈕的打開或關(guān)閉。當(dāng)這些屬性全部關(guān)閉時,這些控件將在外觀與行為上與一個常規(guī)ListBox控件一樣。然而,你不能使用一個重載的CreateChildControls把控件添加到其上,因?yàn)檫@個函數(shù)是用來構(gòu)建一個控件層次樹的。這個ASP.NET ListBox控件被編寫為一個生成控件而且直接把它的所有HTML內(nèi)容繪制到生成引擎;這樣以來,你需要在此處“注入”你的內(nèi)容。你將使用生成控件方法來構(gòu)建一個標(biāo)簽和兩個按鈕,并且通過重載Render方法來生成它們。然而,一旦你重載這個方法,你就完全取消了所有的在原始ListBox中的生成內(nèi)容,而這是不可取的。
看完上述內(nèi)容,你們對ASP.NET中如何使用 ListBox控件有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。