自定义控件的开发

1.在asp.net中,(传统意义上)可供你开发的控件实际上有两种:

(1)Custom Control:Custom Control 是纵向的,是对系统本身控件的继承和扩充,在程序中以DLL文件形式存在。

(2)User Control:User Control 则是横向的,是对系统本身控件的组合,在系统中以.ascx为后缀名。

相比之下前者具有更大的灵活性,同时开发起来比较复杂,而后者容易开发,但可重用性就比较差。一般来说用户会先用User Control来开发,只有当其不堪重用的时候才转而使用Custom Control。

 

2.常见的4种自定义控件:

有时候针对不同的项目我们可能要开发不同用项的服务器控件,比如说特殊用途的DataGrid;有时候我们可能会被要求开发一些常用的控件,比如说像Chart、TreeView、Menu等这一类通用控件。针对于此,你可能会有四种不同的选择:
(1)创建一个用户控件,用它封装其用户界面 (UI) 的服务器控件,无需编写任何额外的代码。
(2)开发一个编译控件,该控件结合了两个或多个现有控件的功能。例如,需要一个封装一个按钮和一个文本框的控件。可以使用复合控件来完成。
(3)从现有控件中派生并重写其属性、方法或事件来自定义现有控件。
(4)从基本控件类之一派生来创建自定义控件。
以上四种方式从难度上来讲顺序依次复杂,使用原则如前所述,只有当前者达不到项目要求时才需考虑后者,一般来说,开发用户控件所使用的编程模型与后三个有着很大不同,它更类似于Asp.Net页的开发。

 

3.Custom Control的开发与使用:

(1)只需要定义一个直接或间接从Control派生的类,并重写Reader方法即可。

(2)两个常见的服务器控件基类:

  System.Web.UI.Control;

  System.Web.UI.WebControls.WebControl;

 Control 类定义了所有服务器控件共有的属性、方法和事件。其中包括控制控件执行生命周期的方法和事件,以及 ID、UniqueID、Parent、ViewState 和 Controls(子控件集合)等属性。Control 没有用户界面 (UI) 特定的任何功能。如果创作的控件没有提供 UI,或者组合了其他呈现其自己的 UI 的控件,则从 Control 派生。

WebControl 类是从 Control 派生的,并为 UI 功能提供附加的属性和方法。这些属性包括 ForeColor、BackColor、Font、BorderStyle、Height 和 Width。WebControl 是 ASP.NET 中 Web 服务器控件系列的基类。如果控件呈现 UI,则从 WebControl 派生。
(3)Reader方法

Render 方法采用 System.Web.UI.HtmlTextWriter 类型的参数。控件要发送到客户端的 HTML 作为字符串参数传递到 HtmlTextWriter 的 Write 方法。

 

4.在VS中实现:

(1)新建一个空白解决方案,然后为其添加两个项目:

一个叫做Web的Web应用程序项目。(用于测试我们开发出的控件)

一个名为MyControls的Web控件库项目。

(2)为Web项目选择依赖项和添加引用。

在Web项目上点击右键,选择依赖项,使项目Web取决于MyControls,接着再为Web项目添加MyControls的引用(编译成的MyControls.dll文件后被copy到Web目录的Bin文件夹下,你可以在任何地方使用这个MyControls.dll文件)。

(3)在Web项目中的WebForm1.aspx文件首行添加如下代码(用于向页面注册此控件):

<%@ Register TagPrefix="ccs" Namespace="MyControls" Assembly="MyControls" %>

(4)在<Form>标记之间添加如下代码(添加此控件到页面上):
<ccs:MyControl id="Control1" runat="server" Text="Hello World"></ccs:MyControl>

(5)看一下这个自定义控件源文件(MyControl.cs)的组成。
using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;



namespace MyControls

{

// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的

//工具箱中拖动自定义控件时为它生成的默认标记

[DefaultProperty("Text"),

ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")]

//类MyControl派生自WebControl

public class MyControl : System.Web.UI.WebControls.WebControl

{

private string text;

//Attribute Bindable指定属性是否通常用于绑定

//Category指定属性或事件将显示在可视化设计器中的类别

//DefalutValue用于指定属性的默认值

[Bindable(true),

Category("Appearance"),

DefaultValue("")]

public string Text

{

get

{

return text;

}

set

{

text = value;

}

}

//重写WebControl的Render方法,采用HtmlTextWriter类型的参数

protected override void Render(HtmlTextWriter output)

{

//发送属性Text的值到浏览器

output.Write(Text);

}

}

}


现在我们略略修改一下Render方法的输出值,试着为输出文本加上标签Span:
output.Write("<span>"+Text+"</span>");
也可以用标签修饰文本的显示:
output.Write("<span><b>"+Text+"</b></span>");

  



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值