140 likes | 343 Views
第 8 章 创建用户控件和自定义控件. 在 ASP.NET 中,除了内置的 HTML 服务器控件和 Web 服务器控件之外,用户还可以根据自己的实际需要,编写自定义的控件。本章将介绍有关于创建用户控件和自定义控件的知识。通过本章的学习,读者将掌握用户控件和自定义控件的创建和使用。. 8.1 用户控件. 用户控件的扩展名为“ ascx” ,与“ aspx” 在结构上相似,是指页面中加载的功能块模块。只是用户控件不能单独作为页面运行,必须嵌入到 aspx 页面中,或者嵌入到其他用户控件中使用。. 8.1.1 用户控件概述.
E N D
第8章 创建用户控件和自定义控件 • 在ASP.NET中,除了内置的HTML服务器控件和Web服务器控件之外,用户还可以根据自己的实际需要,编写自定义的控件。本章将介绍有关于创建用户控件和自定义控件的知识。通过本章的学习,读者将掌握用户控件和自定义控件的创建和使用。
8.1 用户控件 • 用户控件的扩展名为“ascx”,与“aspx”在结构上相似,是指页面中加载的功能块模块。只是用户控件不能单独作为页面运行,必须嵌入到aspx页面中,或者嵌入到其他用户控件中使用。
8.1.1 用户控件概述 • 在一个大系统中,有时候会只能几个*.aspx页面,其余的都是做成*.ascx页面,如网站的导航、网页的头部和底部。这样可以增强页面之间的藕合性,一个用户控件*.ascx都作为一个独立的功能块。需要修改某一功能时,只需要修改相应的*.ascx文件。(具体内容请参照书。)
8.1.3 将Web窗体页转化为用户控件 • 从前面小节的几个示例代码可以看出,用户控件比Web窗体页面少了<html>、<body>和<form>等元素,并且将aspx页面中的@Page指令变成了@Control指令。 • 知道了用户控件和Web窗体页面的差别,就可以通过添加、删除和修改相应的元素,来实现Web窗体页面和用户控件的相互转化。
8.2 自定义控件 • 所谓自定义控件,就是指编写好后,生成一个dll文件,可以添加到工具箱中,然后直接在页面上使用的控件。由于自定义控件的编写,使用到的知识面比较多。所以在本节中,笔者只带领各位读者,做一个最简单的自定义控件,并通过制作过程,来对自定义控件的各方面进行逐步了解。
8.2.1 制作一个简单的自定义控件 • (具体内容请参照书。)
8.2.2 对自定义控件应用控件公共属性 • 从System.Web.UI.WebControls.WebControl命名空间中,可以派生出要呈现用户界面(UI)元素的控件,或包含任何其他客户端可见元素的控件。如果控件要呈现在客户端浏览器中不可见的元素,则应从System.Web.UI.Control派生该控件。WebControl类从Control类派生,并添加了与样式相关的属性,如Font、ForeColor和BackColor。此外,一个从WebControl派生的控件,也将自行拥有ASP.NET的主题功能。(具体内容请参照书。)
8.2.3 无需编译测试自定义控件 • 无需将自定义控件编译为程序集,只需要借助ASP.NET的动态编译功能,就可以对页中的自定义控件进行测试。大家都知道,ASP.NET网站根目录下,通常有一文件夹App_Code,该目录中放置的代码,可以被ASP.NET动态编译。这样就可以从页面中,访问App_Code中源文件中的类,而无需将其手动编译为程序集。如果将控件的源文件放入了App_Code目录,则对控件的代码所做的任何更改,都能立即在使用这些控件的页中反映出来。(具体内容请参照书。)
8.2.4 将控件编译为程序集 • 可以使用命令行工具csc.exe,来将所创建的类编译成dll文件,方法如下所示。(具体内容请参照书。)
8.2.5 控件状态 • 在ASP.NET 2.0中,引入与视图状态类似的控件状态,但却在功能上独立于视图状态。控件状态是专门用来对控件的重要数据进行存储的,比如一个页面控件的页数,页面回发时,必须用到这些数据,才能使控件正常工作。
8.2.6 自定义控件的属性 • 控件的属性,包含了简单属性和子属性。 • 简单属性概括起来,就是一个类型为字符串,或者容易被映射到字符串的类型属性。简单属性在控件的开始标记上,会自行保留为属性。比如String类型的属性就是简单属性。通过添加代码,可以将简单属性存储在视图状态中,以在回发期间进行状态管理。
8.3 常见问题 • 用户控件和自定义控件用来减少代码的重复,提高控件的使用率。它们使用过程中常遇到的问题如下所示。
8.3.1 用户控件和自定义控件哪个对开发者要求比较高 • 答:自定义控件对开发者的要求更高一点。因为用户控件其实和页面只是有几个指令不同,其他的都相同。读者完全可以用制作页面的方法,来制作功能强大的用户控件。而自定义控件,先别说没有可视化的编辑环境,而且还要用到其他如继承、重载等特性,还要定义控件的其他属性、方法和事件等。所以相对来说,对开发者要求比较高一点。
8.3.2 能以编程的方式来控制用户控件进行加载吗 • 答:完全可以以编程的方式,来控制控件的动态加载,参考代码如下所示。 • UserControl mycontrols=(UserControl)LoadControl("MyControls.ascx"); //声明用户控件 • Controls.Add(mycontrols); //添加