找回密码
 注册
搜索
热搜: java php web
查看: 542|回复: 0

[笔记]开发asp.net自定义控件(asp.net学习笔记二)

[复制链接]
发表于 2009-1-26 11:58:52 | 显示全部楼层 |阅读模式
[笔记]开发asp.net自定义控件(asp.net学习笔记二)
在Web项目上点击右键,选择依赖项,使项目Web取决于MyControls,接着再为Web项目添加MyControls的引用(编译成的MyControls.dll文件后被copy到Web目录的Bin文件夹下,你可以在任何地方使用这个MyControls.dll文件)。
在MyControls项目中添加一个Web自定义控件并命名为MyControl.cs,接着在Web项目中的WebForm1.aspx文件首行添加如下代码(用于向页面注册此控件):


标记之间添加如下代码(添加此控件到页面上):

OK,一个带有Text属性的自定义控件已经完成了,现在就可以运行它并观看效果了。
这个控件的结果仅仅是将一行文本输出到浏览器并显示出来,但是我们平时所用到的控件,小到如Label,大到如DataGrid,都是基于这一原理开发出来的。接着我们看一下这个自定义控件源文件(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>")]
//类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(""+Text+"");
也可以用标签修饰文本的显示:
output.Write(""+Text+"");
也可以添加更多的属性来控制文本的输出,在此基础上就可以创作出丰富的UI控件。
有时候针对不同的项目我们可能要开发不同用项的服务器控件,比如说特殊用途的DataGrid;有时候我们可能会被要求开发一些常用的控件,比如说像Chart、TreeView、Menu等这一类通用控件。针对于此,你可能会有四种不同的选择:
创建一个用户控件,用它封装其用户界面 (UI) 的服务器控件,无需编写任何额外的代码。
开发一个编译控件,该控件结合了两个或多个现有控件的功能。例如,需要一个封装一个按钮和一个文本框的控件。可以使用复合控件来完成。
从现有控件中派生并重写其属性、方法或事件来自定义现有控件。
从基本控件类之一派生来创建自定义控件。
以上四种方式从难度上来讲顺序依次复杂,使用原则如前所述,只有当前者达不到项目要求时才需考虑后者,一般来说,开发用户控件所使用的编程模型与后三个有着很大不同,它更类似于Asp.Net页的开发。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|软晨网(RuanChen.com)

GMT+8, 2024-9-20 15:29

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表