使用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)。这个机制同样适应于处理其他的服务器控件。