您的位置:首页 > 编程语言 > ASP

asp.net控件开发基础(1)

2006-11-27 14:27 423 查看
asp.net本身提供了很多控件,提供给我们这些比较懒惰的人使用,我认为控件的作用就在此,因为我们不想重复工作,所以要创建它,这个本身便是一个需求的关系,所以学习控件开发很有意思.

wrox网站上有本书 Professional ASP.NET 2.0 Server Control and Component Development

现在还没有出版,但网站上放出了代码,所以正好下载过来学习一下.

我看过前几章代码,环环相扣,作者用不同的知识向我们展示同一个效果,所以循序渐进的学下来很有好处.

虽然自己对控件开发还不是很熟悉,但我感觉以下几点很重要,是我自己总结的

1.了解控件之间的继承关系

最好是先看看看System.Web.UI命名空间

(1)Control 类,所有的控件都共享的一个类,你需要去看下其里面受保护的几个方法和属性,虽然一下看不完,以后会发现常常用到这些方法

大家可以在MSDN看一下其派生类

(2)HtmlTextWriter 类

不得不了解的一个类,主要工作就是我们写的标记字符和文本输出

2.重写方法

(1) 必须继承Control类
(2) 重写Control类的Render方法,这个是必须的,因为其他控件都继承了Control 类类,所以几乎所有控件都有这个方法

3.熟悉元数据

大家都知道asp.net控件属性在编辑器上是分类的,如外观,行为,布局等,每个属性还给出了解释

简单的元数据就是起到这个作用,当然你也可以不加,但使用了元数据让人感到有亲切感,写法如

[CategoryAttribute("Appearance")]

要使用元数据,必须引用System.ComponentModel命名控件,一般你如果写组件的话,不可能不用到这样类库。具体的MSDN上有所介绍。

一.输出字符串
说多了没意思,还是来演练吧。首先你得了解HTML。来看下面代码,效果就是输出HTML到客户端

示例一

using System;
using System.Web.UI;

namespace CustomComponents

效果很简单,其实就一直在输出HTML再加几个属性,大家可以直接把代码放在App_Code文件夹里,就可自动编译,当然也可以创建web控件库.
注意要继承Control类,重写Render方法,用HtmlTextWriter类的Write输出HTML

使用控件

(1).需要先注册一下

<%@ Register TagPrefix="custom" Namespace="CustomComponents" %>

(2) 然后就使用标签输出效果

<custom:CreditCardForm1 runat="server" ID="ccf" />

下为效果图

using System;
using System.Web.UI;
using System.ComponentModel;

namespace CustomComponents

上面我们接触到了元数据了,意思应该很好理解,为了测试元数据的作用,大家可以新建一个类库项目,然后把写的代码放这个项目里面,接着web网站引用这个项目,成功生成以后,你会发现工具箱已经自动帮你加上了这几个控件

protected override void Render(HtmlTextWriter writer)

实现的效果虽然一样,但上面的代码是不是漂亮很多,而且不容易输错.这也是所提倡的做法

四.未使用视图状态的后果

还是视图状态,关于视图状态大家可以参考MSDN和相关文章

看以下的示例,还是CreditCardForm3这个控件

if (!IsPostBack)
public override string PaymentMethodText

public override string CreditCardNoText

public override string CardholderNameText

public override string ExpirationDateText

public override string SubmitButtonText

以上全为个人见解,如有错误,希望大家指出.

点击下载代码

posted on 2006-07-30 20:05 Clingingboy 阅读(8847) 评论(27) 编辑 收藏 引用 网摘 所属分类: B Asp.net组件开发


//Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);

//]]>

Feedback

# re: asp.net控件开发基础(1) 2006-07-30 20:58 高海东
正打算学习控件的开发呢 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-30 21:39 Ring
期待作者能通俗地把控件开发从"入门"一直介绍到"精通"! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-30 21:51 Clingingboy
谢谢,可能我表达的并非很专业,有你们的支持,我会继续写下去的 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-30 22:12 aspnetx
很早就想研究这个不过因为书上写的都很复杂甚至不知所云所以就搁置了好长一段时间,今天看到楼主写的使我有信心把其学明白
谢谢 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-31 10:40 ekufly
呵呵
很好,又学到了一些,谢谢 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-31 10:51 Icebird
一般都是直接使用HtmlTable, HtmlTableRow和HtmlTableCell来Render的, 使用RenderBeginTag和RenderEndTag的可读性没有那么好 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-31 10:52 一唯
楼主能光看代码事例代码就能这样理解,厉害。
也想学学控件开发,希望楼主继续,谢谢:)
对了,那里下载那本书的源码,有地址吗? 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-31 12:00 Clingingboy
@一唯
http://www.wrox.com/WileyCDA/WroxTitle/productCd-0471793507.html

不像中国的有些出版社喜欢把代码附光盘赠送,几十兆的东西,有必要吗? 回复 更多评论


# asp.net控件开发基础(1) [TrackBack] 2006-07-31 12:36 隨風.NET http://www.cnblogs.com/Clingingboy/archive/2006/07/30/463471.html 查看原文 回复 更多评论


# re: asp.net控件开发基础(1) 2006-07-31 13:17 メ冰枫ぱ雪
这个好呀。。 我现在就是一个大的体系搞不清楚。。 回复 更多评论


# asp.net控件开发基础(2) [TrackBack] 2006-08-01 21:36 Clingingboy
上一篇:http://www.cnblogs.com/Clingingboy/archive/2006/07/30/463471.html或许大家还对为何要重写Render方法存有疑惑,希望大家看看我... 查看原文 回复 更多评论


# re: asp.net控件开发基础(1) 2006-08-06 10:27 壮志
通俗易懂,太好了! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-09-11 15:01 过路人
我的天哪,为什么这么好的文章今天才被我发现。现在不study等到何时。希望以后楼主能多介绍这方面的内容,强烈感谢!超级支持! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-09-12 14:27 SoftWareBoy
很好!支持! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-09-18 10:33 庸人不自擾
收藏再看:) 回复 更多评论


# re: asp.net控件开发基础(1) 2006-09-20 20:43 totalhuang
非常感觉你能把这些文章拿出来分享!
:-) 回复 更多评论


# re: asp.net控件开发基础(1) 2006-09-24 09:24 Benking[匿名]
不错,值得学习。 回复 更多评论


# re: asp.net控件开发基础(1) 2006-09-25 15:47 巫云[匿名]
我看过了,ASP.net 1.0 的服务器控件开发的那本书,也懂了一些机制
但还不是很熟练,希望通过你的讲解加深认识,和大家交流。 谢谢 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-11 16:07 李燕平
正在学习控件开发,早来这里就好了!!感谢楼主!! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-14 13:21 沙漠野狼
请问,怎么把编译好的dll放到工具箱中? 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-14 13:24 沙漠野狼
就是在你在这里:“上面我们接触到了元数据了,意思应该很好理解,为了测试元数据的作用,大家可以新建一个类库项目,然后把写的代码放这个项目里面,接着web网站引用这个项目,成功生成以后,你会发现工具箱已经自动帮你加上了这几个控件”,这里说的可以具体点吗,我是刚接触,还找不到地方呢?谢谢大虾! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-15 22:24 cnodin
LZ写的这一系列的教程非常好,我从中学到了不少的东西。这里,我提个小小的建议,对于不需要UI接口的控件,可以从Components继承,并非必须从Control继承。 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-15 23:07 Clingingboy
@cnodin
谢谢你的建议,刚写这篇的时候,还不是很深入,以后有机会,把该补充的都补充一下
@沙漠野狼
如果是vs2005的话,则在工具箱处选择选项,然后浏览把dll文件文件加进去,就可以看见控件了,或者直接把dll文件放bin目录下,然后注册就可以了 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-25 20:53 songhl
对于原创作者,我总是很支持!!! 回复 更多评论


# re: asp.net控件开发基础(1) 2006-10-30 17:50 jackychen1012
谢谢,我现在正需要这样的内容,受益非浅 回复 更多评论


# re: asp.net控件开发基础(1) 2006-11-10 16:24 ^_^
非常不错
http://www.carva.net 回复 更多评论


# re: asp.net控件开发基础(1) 2006-11-20 11:41 gggg
四.未使用视图状态的后果
五.使用视图状态改善效果
//
对于这个2个,使用视图状态如果换成webcontrol控件就不需要这样. 回复 更多评论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: