asp.net组件(8)控件的层次结构和WebControl
2007-12-19 22:18
483 查看
HTML服务器控件的控件从System.Web.UI.HtmlControls.HtmlControl 类派生
标准服务器控件的控件从System.Web.UI.WebControls.WebControl 类派生
HtmlControl 类和WebControl 类则从System.Web.UI.Control 类派生,并扩展.
前面我们都是使用Control来派生.我们有很多事需要自己做.如果使用WebControl我们可以方便不少.
当然要看情况而定.
怎样才能比较直观的看出它们的差别呢?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebComponent
把以上几个控件都加入页面中.点下页面看下属性编辑器.就会发现差别了.
asp:Label相信大家很熟悉了.它便是继承至WebControl控件.
拉入一个Label控件.运行 <span id="Label1">Label</span>
asp.net把Label翻译成span这个标签.
那要是我不想要span,我想要div行吗.
当然可以.
public class WebStudy3Component : Label
{
protected override System.Web.UI.HtmlTextWriterTag TagKey
{
get
{
//return base.TagKey; 此标签便是span
return System.Web.UI.HtmlTextWriterTag.Div;
}
}
}
运行程序.<div id="WebStudy3Component1"></div>
完成了第一步
接下来我们就来研究下<div id="WebStudy3Component1"></div>是怎么出来的.
我们先来看看继承至Control的控件是怎么实现这个的
public class Control1 : Control
那继承至WebControl呢?我都没有绘.它是怎么出来呢?
public class WebStudy1Component : Label
public class WebStudy1Component : WebControl
{
protected override void Render(HtmlTextWriter writer)
{
/**//*
* 首先RenderBeginTag被调用 画出<table>
* 接着RenderContents被调用 画出内容
* 最后RenderEndTag被调用 画出</table>
*/
base.Render(writer);
}
protected override HtmlTextWriterTag TagKey
{
get
{
//return base.TagKey;
return HtmlTextWriterTag.Table;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Width, "500");
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "#f5f5f5");
base.AddAttributesToRender(writer);
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
//在这里调用了AddAttributesToRender 和组件(2)中有说到样式在标签之前画出.
base.RenderBeginTag(writer);
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("阿鹏");
writer.RenderEndTag();
writer.RenderEndTag();
//base.RenderContents(writer);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
}
}
可见继承WebControl中绘制控件.主要工作已经转移到RenderContents(HtmlTextWriter writer)里了
标准服务器控件的控件从System.Web.UI.WebControls.WebControl 类派生
HtmlControl 类和WebControl 类则从System.Web.UI.Control 类派生,并扩展.
前面我们都是使用Control来派生.我们有很多事需要自己做.如果使用WebControl我们可以方便不少.
当然要看情况而定.
怎样才能比较直观的看出它们的差别呢?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebComponent
把以上几个控件都加入页面中.点下页面看下属性编辑器.就会发现差别了.
asp:Label相信大家很熟悉了.它便是继承至WebControl控件.
拉入一个Label控件.运行 <span id="Label1">Label</span>
asp.net把Label翻译成span这个标签.
那要是我不想要span,我想要div行吗.
当然可以.
public class WebStudy3Component : Label
{
protected override System.Web.UI.HtmlTextWriterTag TagKey
{
get
{
//return base.TagKey; 此标签便是span
return System.Web.UI.HtmlTextWriterTag.Div;
}
}
}
运行程序.<div id="WebStudy3Component1"></div>
完成了第一步
接下来我们就来研究下<div id="WebStudy3Component1"></div>是怎么出来的.
我们先来看看继承至Control的控件是怎么实现这个的
public class Control1 : Control
那继承至WebControl呢?我都没有绘.它是怎么出来呢?
public class WebStudy1Component : Label
public class WebStudy1Component : WebControl
{
protected override void Render(HtmlTextWriter writer)
{
/**//*
* 首先RenderBeginTag被调用 画出<table>
* 接着RenderContents被调用 画出内容
* 最后RenderEndTag被调用 画出</table>
*/
base.Render(writer);
}
protected override HtmlTextWriterTag TagKey
{
get
{
//return base.TagKey;
return HtmlTextWriterTag.Table;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Width, "500");
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "#f5f5f5");
base.AddAttributesToRender(writer);
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
//在这里调用了AddAttributesToRender 和组件(2)中有说到样式在标签之前画出.
base.RenderBeginTag(writer);
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
writer.RenderBeginTag(HtmlTextWriterTag.Td);
writer.Write("阿鹏");
writer.RenderEndTag();
writer.RenderEndTag();
//base.RenderContents(writer);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
}
}
可见继承WebControl中绘制控件.主要工作已经转移到RenderContents(HtmlTextWriter writer)里了
相关文章推荐
- asp.net 服务器控件层次结构
- Web Control开发随笔(2):ASP.NET 控件生命周期
- ASP.NET控件开发学习笔记--第7回 从WebControl继承
- Web Control开发随笔(2):ASP.NET 控件生命周期
- Asp.Net Web控件 (八)(TabControl 选项卡控件)
- Asp.net控件开发学习笔记(七)----WebControl基类
- ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件
- Asp.Net Web控件 (八)(TabControl 选项卡控件)
- ASP.NET自定义控件组件开发 第二章 继承WebControl的自定义控件
- 【转】Asp.net控件开发学习笔记整理篇 - WebControl基类
- Asp.net Web Crop Image Control asp.net控件和jquery 自定义的一个截图控件
- 控件发布:FCKeditor ASP.NET 2.0 WebControl
- ASP.NET控件开发学习笔记--第8回 WebControl分析
- [ASP.NET 控件实作 Day16] 继承 WebControl 实作 Toolbar 控件
- Asp.Net Web控件TabControl 选项卡控件
- [导入][ASP.NET 控件实作 Day16] 继承 WebControl 实作 Toolbar 控件
- asp.net关于WEB端用户重复提交问题。禁用服务器控件按钮问题。
- 基于 jQuery 的专业 ASP.NET WebForms/MVC 控件库!
- 在asp.net中动态生成web控件
- Asp.net Web控件自定义