第5章 ASP.NET用户控件

有过Web系统开发经验的读者或许了解,在Web系统的开发中,经常会有一些功能模块在很多地方重复地出现,例如新闻管理系统中的用户登录/注册、推荐新闻、热点新闻和页面上的一些固定栏目等。为了提高代码的可复用性,减少系统的开发与维护成本,一般会把这些可重用的功能模块写成单独的通用模块,以供需要的地方引用。

在ASP.NET中,要实现这样的通用模块,可以将这些功能模块封装成“用户控件”,然后在需要的页面中引用这些“用户控件”,从而达到了“一次封装,N次复用”的效果。本章将介绍ASP.NET用户控件的相关知识,并重点讲解用户控件的封装方法与编程技巧。

5.1 用户控件详解

ASP. NET Web用户控件文件(.ascx)与ASP.NET Web页面文件(.aspx)相似。与Web页面文件一样,用户控件由含有页面标签的用户界面文件(.ascx)、页面脚本文件((JvaScript)和后台代码文件(.cs)组成。用户控件可以包含所有Web页面可以包含的内容,包括静态的HTML内容和ASP.NET服务器控件。同时,它还接受和Page对象一样的事件(如Load和PreRender)并通过属性暴露一组相同的ASP.NET固有的对象,如Application、Session、Request和Response。因此,可以采取与创建ASP.NET Web页面相似的方式创建用户控件,然后向其中添加所需的标记和子控件。

通常,用户控件与Web页面存在着以下区别:

1)用户控件的文件扩展名为.ascx,而Web页面的文件扩展名是.aspx。其中,用户控件是从System.Web.UI.UserControl类继承而来的,而Web页面则是从System.Web.UI.Page类继承而来的。尽管如此,它们却有许多相同之处,System.Web.UI.UserControl类和System.Web.UI.Page类都继承自同一个System.Web.UI.TemplateControl类。因此,System.Web.UI.TemplateControl类的属性、方法和事件都是它们共同所有的。

2)用户控件中没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义,下一节将详细阐述@Control指令。

3)用户控件不能作为独立文件运行,你必须像处理其他任何控件一样,将它们添加到ASP.NET Web页面中进行运行。

4)用户控件中没有<html>、<head>、<body>和<form>元素。因此,除了<html>、<head>、<body>和<form>元素之外,可以在用户控件上使用与在ASP.NET Web页面上所用相同的HTML元素和Web服务器控件。