使用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)。這個機制同樣適應于處理其他的服務器控件。