使用ASP.NET控件進行程序設計
2024-07-10 13:05:17
供稿:網友
asp.net 控件時asp.net架構的基本組成部分。從本質上講,asp.net是.net
framework中的類,可以在asp.net頁面上映射控件聲明。然后,那些類根據他們的
屬性,為控件創建html。由于類的對象是在運行時間與頁面一起被編譯的,因此開
發人員可以按照面向對象的方式訪問那些對象,例如讀取和更改他們的屬性、調用他
們的方法和處理服務器端的事件等。在傳統asp程序設計中,服務端的vbscript代碼
和html標記是混和在一起的,容易引起混淆。而在asp.net程序設計中,由于能夠
以面向對象的方式訪問對象,因此可以創建結構更好、可讀性更強的代碼。
1、 asp.net中的服務器控件
asp.net提供了許多不同的服務器控件,他們可以分為以下幾類:
<1> html server controls(html 服務器控件):
這些控件是包含標準html標記的 類,它由runat="server"屬性進行聲明。
除了runat="server"屬性之外,控件的其他聲明 不變,但是通過代表控件的對象,
可以在代碼中訪問、讀取、更改控件的屬性。例如, 支持runat="server"屬性的
3個標記是<a>、<select>和<input>。
<2> asp.net web form controls:
這是另一組復制基本html標記(例如<input>、<a>、<select> 和<button>等)的功能的控件,
但是這組控件中的屬性和方法是一致的,并且屬性和方法的名字有一定的意義,因此,
開發人員就可以比較容易地聲明和訪問他們。hyperlink、 listbox和button等都是這類控件。
<3> asp.net list controls(asp.net 列表控件):
這組控件具有一致的命名規則,并且擴展了基本web form control的屬性。它們可以與
數據源進行綁定(例如數據庫、xml文件和數組等),并且能夠以各種各樣的方式(例如
列表、表格、網格等)顯示數據。
<4> asp.net templated controls (asp.net模板控件): 這組控件為數據源中的每一個
數據項而重復模板。他們允許您使用不同的模板去顯示記錄、編輯記錄和強調重要
的記錄,并且還能夠對分頁的支持。
<5> asp.net rich controls :
通過設置這類控件的一些屬性, 可以讓這類高級控件生成html和javascript代碼。
這類控件的杰出代表就是calendar控件,本章的內容中將對這類控件進行詳細討論。
<6> asp.net validation controls
通過頁面上聲明這類控件,可以很容易地根據一定的標準或用戶定義的規則(例如輸入
不能為空、輸入必須是數字、輸入的數字必須大于某個值等)對相關的輸入進行驗證。
2 、通過編程的方式創建服務器控件
使用asp.net , 可以創建html服務器控件的實例、使用面向對象的方法設置控件
的屬性,并把控件添加到頁面的controls集合中,這樣,所有的工作都完成了。
例如,下面的代碼(htmlservtest2.aspx中的代碼) 是新aspx頁面的全部 內容:
沒有控件的聲明,只有服務器端的page_load程序,這個程序動態地創建一個5行
4列的表,并設置表的顏色和文本,然后在頁面上把表顯示出來:
<script runat="server" language="c#">
void page_load()
{
//create a new htmltable object
htmltable table1 = new htmltable();
htmltablerow row;
htmltablecell cell;
//set the table’s styles
table1.border =1;
table1.cellpadding =3;
table1.cellspacing =3;
table1.bordercolor ="red";
for(int i=1; i<=5; i++)
{
//create a new row and set its background color
row = new htmltablerow();
row.bgcolor =(i%2==0 ?"lightyellow" : "lightcyan");
for(int j=1; j<=4; j++)
{
//create a cell and set its text
cell = new htmltablecell();
cell.innerhtml ="row :" + i.tostring()+
"<br>cell:"+j.tostring();
//add the cell to the current row
row.cells.add(cell);
}
//add the row to the table
table1.rows.add(row);
}
//add the table to page
page.controls.add(table1);
}
</script>
上面的代碼中有兩個嵌套的循環:外層的循環創建行,然后進入內層的循環,內層的
循環創建數據單元,并把數據單元添加到行的cells集合中。當一次內層的循環結束時,
帶有數據單元的行就被添加到表的rows集合中。最后一步是把表添加到頁面的controls
集合中。執行的結果如圖4-2。
從創建的這個表中可以看到有多少個子控件(數據單元和行)被添加給父母的集合
(rows和controls)。這個機制同樣適應于處理其他的服務器控件。