程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET自定義控件 第四天 折疊面板自定義控件

ASP.NET自定義控件 第四天 折疊面板自定義控件

編輯:關於ASP.NET

1. 引言

在前幾次任務裡我們開發一個星級控件並逐漸為其增加一新的特性,在本次任 務裡,我們將開發一個較復雜的自定義控件,該自定義控件需要實現折疊面板的 功能。用戶可以向面板控件中自由添加控件,該控件呈現出來後會根據用戶設置 決定是否顯示折疊按鈕,如果允許則用戶可以點擊按鈕展開/折疊按鈕以顯示或隱 藏面板,並且可以在服務器端捕捉到展開/折疊事件以進行更多的控制,該控件運 行效果圖如下:

2. 分析

我們在確定該控件最終能夠使用HTML呈現出來之後,接下來要考慮的是為該自 定義控件選擇一個合適的基類。從要實現的功能來看,該控件分為兩部分,一部 分是包含展開/折疊按鈕的標題行,另一部分是包含用戶放置按鈕的容器,很顯然 這個容器我們可以使用Panel類,為了保留用戶直接定義Panel中子標記的特性, 使自定義控件直接繼承自Panel類,根據設置決定是否顯示標題行,並且根據面板 狀態顯示恰當的展開或折疊圖標。

由於Panel可以看作一個容器控件,那麼當頁面上使用多個該控件時會產生什 麼樣的結果,容器中的子控件還能保證是唯一的嗎?可以嘗試編寫一個繼承自 Panel類的自定義控件CustomerControl並向其控件集合(Controls屬性)中添加 一個ID為txt的文本框,當在頁面上放置兩個這樣的自定義控件時會生成了兩個文 本框(毫無疑問,因為是兩個自定義控件),但是它們的id屬性均為txt,類似於 以下代碼:

<span id="cc1"><input name="txt" type="text" id="txt" 

/></span>
<span id="cc2"><input name="txt" type="text" id="txt" 

/></span>

為了避免這種情況發生,只需要使CustomerControl類實現INamingContainer 接口,再次預覽頁面,將會發現生成的文本框已經具有唯一的id了:

<span id="cc1"><input name="cc1$txt" type="text" 

id="cc1_txt" /></span>
<span id="cc2"><input name="cc2$txt" type="text" id="cc2_txt" 

/></span>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved