终于到用户控件(usercontrol)啦,按照microsoft press出的书的说法:“这一方面是如此重要,以至于一天没有学习这种控件,您就浪费了一天时间”。这样说虽然有点悬,但是用户控件确实很重要哦。
以前做asp的时候,经常会把一些重复使用的代码做成一个单独的页面(比如说页头,页尾等),然后用<!--#include file="xxx.asp"-->的办法把这个重复的地方放进页面,现在.net提供了更加强大的办法来实现这个功能,这就是用户控件技术。
用户控件的作用主要有:
a.分解复杂的用户界面元素,并将它们转化成可重用的组件。
b.创建适合于单个用户的个性化动态页面。
c.促进子页面级别的输出缓存—也就是说,将某一页面的静态内容放入缓存,同时允许动态呈现该页面的其他部分。
关于用户控件的详细内容,我就不在这里唠叨了,因为.net framework sdk 文档说的比我清楚啊,大家可以从这个地址
ms-help://MS.NETFrameworkSDKv1.1.CHS/cpguidenf/html/cpconwebformsusercontrols.htm
直接进入。我在这里主要说说我这两天的经验。
在vs.net里可以用“右键-添加”的方式方便的添加一个带codebehind的ascx文件,然后就可以像做普通aspx页面那样来组织页面,完事后ctrl+shift+b一下就ok了。这其中遇到的一个难点就是属性的添加。(事件的添加更是难点,今天先不说,因为我也没有看懂。最近研究“delegate和event”中……)
说到属性,先应该明白这里包含的“面向对象”的内容。我们创建了一个ascx文件,实际上是在顶端的命名空间中添加了一个新类,在aspx文件中使用usercontrol,实际上就是使用了这个类的一个实例。(而创建的usercontrol的类实际上又继承自System.Web.UI.UserControl。)既然是一个类,那自然有c#类的性质,比如说属性和公有域。
而我们所说的usercontrol的属性,实际上就是可以公共使用的性质(这里我也说不清啊,大家可以想一想webcontrols里的一些例子,比如说label的Text,这个东西就是可以公共访问),在后台实现时可以使用c#中类的公有域或属性来完成,在这里我倾向于使用属性,因为这样灵活性更大一些,易于控制。来看一个例子:
---------------------------------------------------user.ascx
<asp:Label >从面向对象的角度来看两个cs文件,这是同一命名空间下的两个类之间的操作。而aspx页面和ascx页面分别是这两个类的实例,所以也可以进行这样的操作。
像这样,可以设定需要使用的其他的属性。实际上,应该尽力预测其他开发人员在使用该用户控件时的需要,然后尽可能的公开能够使用的属性,方便他们自定义控件的外观和行为。
相关文章: