代码改变世界

(1)Asp.Net Server Control 编写

2009-12-09 11:55  Mr.Longer  阅读(254)  评论(0编辑  收藏  举报

     对于编写Asp.Net的服务器端控件,首先要做的,就是要知道什么服务器端控件,为什么要编写服务端控件?

我个人简单认为,服务端控件能够跟服务端进行交互,能够在IIS上Run起来的控件,最终要是要被IIS解析成HTML代码,被浏览器认识。编写服务端控件,不仅提高开发效率,而且还能实现比html普通的控件更为丰富,跟服务器产生交互的功能。虽然只说了这么点优点,是否现在开始有点想认识它了呢?

    首先,要想编写一个服务端控件,就必须弄明白成为一个服务端控件的必须具备的Code,了解它们的继承关系。

 

先看看System.Web.UI命名空间

1.Control 类,所有的控件都共享的一个类,你需要去看下其里面受保护的几个方法和属性,虽然一下看不完,以后会发现常常用到这些方法。可以试着去看看它的派生类哦!

2.HtmlTextWriter 类

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

 

要想自己编写的服务器控件,能够有那么一点特别。

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

 

除了上面的两个初步了解,还要知道一些小小的标记。

[CategoryAttribute("Appearance")]

要使用元数据,必须引用System.ComponentModel命名控件,一般你如果写组件的话,不可能不用到这样类库。具体的MSDN上有所介绍。这个命名空间,很值得去看看,因为里面包含了许多标记。

 

了解了这三步,基本就知道了它的名字了,现在开始让我们知道它的魅力吧!

 怎么利用VS2005创建一个呢?如图: 选择Web控件库,创建一个,就可以了

 

2.然后有个默认的cs代码

WebCustomControl1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebControlLibrary1
{
[DefaultProperty(
"Text")]
[ToolboxData(
"<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")]
public class WebCustomControl1 : WebControl
{
[Bindable(
true)]
[Category(
"Appearance")]
[DefaultValue(
"")]
[Localizable(
true)]
public string Text
{
get
{
String s
= (String)ViewState["Text"];
return ((s == null) ? String.Empty : s);
}

set
{
ViewState[
"Text"] = value;
}
}

protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
}
}

 

说明: Text属性,是此控件默认的,例如:引用的时候,先在aspx页面上注册了后,<?:WebCustomControl1 runat="server" Text="???"></?:WebCustomControl1>,就是这么回事。

然后为什么要重写一个RenderContents方法呢,我想这个,不用说,你也明白,实在不知道,就再继续回去学学OO的初步理论吧!

目的: 要实现自己的html输出,就可以在RenderContents上做手脚,开始编写点Code吧,然后在页面跑跑试试就明白了。