asp.net控件开发基础(15)
2006-12-30 15:06
459 查看
Hello,朋友们,新年快乐.很长时间没写博客了,一直在想写这一篇,可没想好怎么写,就一直放着.现在终于有时间了,那么来继续我们的话题吧.自定义控件.如果你还不熟悉自定义控件开发的话,还请看看我以前写了几篇,希望对你有帮助
1.1何处继承
自定义控件一般从以下几个基类(此处不包含数据控件)
一.Control类(所有服务器控件的基类,算是比较底层的类,如果控件功能比较简单,要求不多,可直接继承此类.)
二.WebControl类(标准控件的基类,继承此类,你可以继承其丰富的公共属性,若标准控件中的控件没有你需要的控件,你可以继承此类)
三.CompositeControl 类(2.0新增的类,此类继承自WebControl类,如果你需要制作复合控件,请从继承此类开始)
四.直接从内置控件继承(我们知道轮子只需要发明一遍,你的需求跟内置差不多的话,请考虑这么做)
1.2呈现控件
Control类Render方法为基本呈现方法,RenderContent方法是在Render方法之上的,其为控件加了一个标签,我认为RenderContent方法是为WebControl类中属性准备的.基本的方法继续深刻的去了解.
1.3与用户交互
纯粹的呈现控件还不够,我们需要传递数据,这就必然让我们了解自定义控件事件处理
1.4接触属性(见第五,九,十篇)
属性相对而言比较简单,也比较好理解,但其又比较麻烦.
当控件属性太多,很容易乱,因此我们又认识了元数据,
把属性进行了分类,如下图
namespace AspDemo.CustomComponents
[assembly: WebResource("AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.image1.jpg", "image/jpeg")]
[assembly: WebResource("AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.help.htm", "text/html", PerformSubstitution = true)]
namespace AspDemo.CustomComponents
protected override void OnInit(EventArgs e)
protected override object SaveControlState()
protected override void LoadControlState(object state)
<pages>
<controls>
<add tagPrefix="aspDemo" namespace="AspDemo.CustomComponents" assembly="AspDemo.CustomComponents"/>
</controls>
</pages>
(2)控件映射
url可以映射,控件也可以,我们在配置Ajax环境的时候就用到了此方法
<pages>
<tagMapping>
<add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="System.Web.UI.Compatibility.RequiredFieldValidator, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</pages>
五.在工具栏上隐藏控件
再讲一个小东西,当定义的控件,不需要在工具栏上显示的话,可以用此元数据把控件隐藏起来
[ToolboxItem(false)]
public class ImageControl : WebControl
{
}
好了,写完这一篇了,如哪里有错误还请大家指出,以上全凭经验写的
以下提供所有例子的代码,希望对大家有用
示例代码下载
1.1何处继承
自定义控件一般从以下几个基类(此处不包含数据控件)
一.Control类(所有服务器控件的基类,算是比较底层的类,如果控件功能比较简单,要求不多,可直接继承此类.)
二.WebControl类(标准控件的基类,继承此类,你可以继承其丰富的公共属性,若标准控件中的控件没有你需要的控件,你可以继承此类)
三.CompositeControl 类(2.0新增的类,此类继承自WebControl类,如果你需要制作复合控件,请从继承此类开始)
四.直接从内置控件继承(我们知道轮子只需要发明一遍,你的需求跟内置差不多的话,请考虑这么做)
1.2呈现控件
Control类Render方法为基本呈现方法,RenderContent方法是在Render方法之上的,其为控件加了一个标签,我认为RenderContent方法是为WebControl类中属性准备的.基本的方法继续深刻的去了解.
1.3与用户交互
纯粹的呈现控件还不够,我们需要传递数据,这就必然让我们了解自定义控件事件处理
1.4接触属性(见第五,九,十篇)
属性相对而言比较简单,也比较好理解,但其又比较麻烦.
当控件属性太多,很容易乱,因此我们又认识了元数据,
把属性进行了分类,如下图
namespace AspDemo.CustomComponents
[assembly: WebResource("AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.image1.jpg", "image/jpeg")]
[assembly: WebResource("AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.help.htm", "text/html", PerformSubstitution = true)]
namespace AspDemo.CustomComponents
protected override void OnInit(EventArgs e)
protected override object SaveControlState()
protected override void LoadControlState(object state)
<pages>
<controls>
<add tagPrefix="aspDemo" namespace="AspDemo.CustomComponents" assembly="AspDemo.CustomComponents"/>
</controls>
</pages>
(2)控件映射
url可以映射,控件也可以,我们在配置Ajax环境的时候就用到了此方法
<pages>
<tagMapping>
<add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="System.Web.UI.Compatibility.RequiredFieldValidator, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</pages>
五.在工具栏上隐藏控件
再讲一个小东西,当定义的控件,不需要在工具栏上显示的话,可以用此元数据把控件隐藏起来
[ToolboxItem(false)]
public class ImageControl : WebControl
{
}
好了,写完这一篇了,如哪里有错误还请大家指出,以上全凭经验写的
以下提供所有例子的代码,希望对大家有用
示例代码下载
相关文章推荐
- asp.net控件开发基础(15) --------总结和补充
- asp.net控件开发基础(15)
- asp.net控件开发基础(15)
- asp.net控件开发基础(15)
- 一起谈.NET技术,asp.net控件开发基础(15)
- asp.net控件开发基础(19)
- asp.net控件开发基础(18)
- asp.net控件开发基础(16)
- asp.net控件开发基础(1)
- asp.net控件开发基础(4)
- asp.net控件开发基础(4) -- WebControl类、RenderContents、重写标签TagKey
- asp.net控件开发基础(1)
- asp.net控件开发基础(9)
- asp.net控件开发基础(5) -- 复杂属性、内嵌属性
- asp.net控件开发基础(12)
- Asp.Net 开发之(1) ---如何自动加载数据到页面或更新数据到数据容器中(基础控件)
- asp.net控件开发基础八
- asp.net控件开发基础(1)
- asp.net控件开发基础(5)
- asp.net控件开发基础(8)