如何开发自定义服务器控件
2008-12-31 11:15
330 查看
原文地址:http://forums.microsoft.com/china/ShowPost.aspx?PostID=4149495&SiteID=15
写一个复合服务器控件 在网页里生成以后是这个样子的
<span id="FileManager1">控件测试</span>
想让它生成以后是在div里该怎么写 ? 如 <div id="FileManager1">控件测试</div>
Code Snippet
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FileManager
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
[ParseChildren(true)]
[ToolboxData("<{0}:FileManager runat=server></{0}:FileManager>")]
[Description("文件管理控件")]
public class FileManager : CompositeControl
{
protected override void RenderContents(HtmlTextWriter output)
{
output.Write("控件测试");
}
}
}
控件生命周期的Render阶段, 主要将控件标记和字符文本输出到 服务器控件输出流 中. 可以直接写Html标记, 也可以调用每个控件都有的RenderControl方法到输出流. 在WebControl基类中, 以Render开头的呈现方法有如下几个:
Ø RenderControl(HtmlTextWriter writer)
Ø Render(HtmlTextWriter writer)
Ø RenderBeginTag(HtmlTextWriter writer)
Ø RenderContents(HtmlTextWriter output)
Ø RenderEndTag(HtmlTextWriter writer)
以上几Render方法中, 并不是毫无联系的, 它们的执行顺序是从上往下, 且有嵌套的调用关系. 其中在RenderControl方法内部会调用Render方法, 在Render方法内部会依次调用RenderBeginTag, RenderContents和RenderEndTag.
其中RenderControl和Render是Control基类中的方法, 因为WebControl本身也是继承Control的. 一般在开发基本控件时, 我们只需求重写RenderContents方法即可, 在此方法中可以把控件Html文本标记和其它内容写到输出流中.
另外, 还有两个可以重载的方法 RenderBeginTag和RenderEndTag, 这两个方法执行时刻点是分别在Render控件内容之前和之后. 可以重写这两个方法自已定义控件的起始和结束标记. 默认情况下控件是以<Span></Span>作为控件起始和结束标记的, 下面是没有重写标记的一个例子的默认显示, 如下图所示:
图 3-1 控件默认标记是<Span>
下面以一个例子来演示使用上面几个方法, 新建一个RenderOrderControl.cs Web控件类, 重载以下几个方法, 并填充相应语句, 修改后代码如下所示 :
/// <summary>
/// Render方法执行顺序: 3
/// </summary>
public override void RenderBeginTag(HtmlTextWriter writer)
{
//base.RenderBeginTag(writer);
writer.AddAttribute( HtmlTextWriterAttribute.Id, this.ID);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
}
/// <summary>
/// Render方法执行顺序: 4
/// </summary>
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
/// <summary>
/// Render方法执行顺序: 5
/// </summary>
public override void RenderEndTag(HtmlTextWriter writer)
{
//base.RenderEndTag(writer);
writer.RenderEndTag();
}
上面代码仅Render出控件Text属性文本. 另外, 重写了控件起始和结尾标签. 呈现到浏览器中的控件如下图所示:
图 3-2 控件重写标记为<div>
写一个复合服务器控件 在网页里生成以后是这个样子的
<span id="FileManager1">控件测试</span>
想让它生成以后是在div里该怎么写 ? 如 <div id="FileManager1">控件测试</div>
Code Snippet
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace FileManager
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
[ParseChildren(true)]
[ToolboxData("<{0}:FileManager runat=server></{0}:FileManager>")]
[Description("文件管理控件")]
public class FileManager : CompositeControl
{
protected override void RenderContents(HtmlTextWriter output)
{
output.Write("控件测试");
}
}
}
控件生命周期的Render阶段, 主要将控件标记和字符文本输出到 服务器控件输出流 中. 可以直接写Html标记, 也可以调用每个控件都有的RenderControl方法到输出流. 在WebControl基类中, 以Render开头的呈现方法有如下几个:
Ø RenderControl(HtmlTextWriter writer)
Ø Render(HtmlTextWriter writer)
Ø RenderBeginTag(HtmlTextWriter writer)
Ø RenderContents(HtmlTextWriter output)
Ø RenderEndTag(HtmlTextWriter writer)
以上几Render方法中, 并不是毫无联系的, 它们的执行顺序是从上往下, 且有嵌套的调用关系. 其中在RenderControl方法内部会调用Render方法, 在Render方法内部会依次调用RenderBeginTag, RenderContents和RenderEndTag.
其中RenderControl和Render是Control基类中的方法, 因为WebControl本身也是继承Control的. 一般在开发基本控件时, 我们只需求重写RenderContents方法即可, 在此方法中可以把控件Html文本标记和其它内容写到输出流中.
另外, 还有两个可以重载的方法 RenderBeginTag和RenderEndTag, 这两个方法执行时刻点是分别在Render控件内容之前和之后. 可以重写这两个方法自已定义控件的起始和结束标记. 默认情况下控件是以<Span></Span>作为控件起始和结束标记的, 下面是没有重写标记的一个例子的默认显示, 如下图所示:
图 3-1 控件默认标记是<Span>
下面以一个例子来演示使用上面几个方法, 新建一个RenderOrderControl.cs Web控件类, 重载以下几个方法, 并填充相应语句, 修改后代码如下所示 :
/// <summary>
/// Render方法执行顺序: 3
/// </summary>
public override void RenderBeginTag(HtmlTextWriter writer)
{
//base.RenderBeginTag(writer);
writer.AddAttribute( HtmlTextWriterAttribute.Id, this.ID);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
}
/// <summary>
/// Render方法执行顺序: 4
/// </summary>
protected override void RenderContents(HtmlTextWriter output)
{
output.Write(Text);
}
/// <summary>
/// Render方法执行顺序: 5
/// </summary>
public override void RenderEndTag(HtmlTextWriter writer)
{
//base.RenderEndTag(writer);
writer.RenderEndTag();
}
上面代码仅Render出控件Text属性文本. 另外, 重写了控件起始和结尾标签. 呈现到浏览器中的控件如下图所示:
图 3-2 控件重写标记为<div>
相关文章推荐
- Asp.net自定义服务器控件开发小技巧: 如何正确获得回传数据
- Asp.net自定义服务器控件开发小技巧: 如何正确获得回传数据
- 如何开发自定义 ASP.NET 服务器控件
- 自定义服务器控件开发
- 开发和使用自定义服务器控件 (二)
- ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
- 如何:使用自定义函数对 ASP.NET 服务器控件进行验证
- C# 关于开发控件,如何自定义属性归类
- 如何:使用自定义函数对 ASP.NET 服务器控件进行验证
- asp.net2.0自定义服务器控件开发(一)
- 开发和使用自定义服务器控件
- 开发和使用自定义服务器控件
- 开发和使用自定义服务器控件
- 如何自定义View视图控件案例开发(一)
- ASP.NET - 如何:自定义 SiteMapPath Web 服务器控件的外观
- 开发和使用自定义服务器控件
- 演练:开发和使用自定义服务器控件
- 演练:开发和使用自定义服务器控件
- 开发简单的自定义服务器控件
- 开发和使用自定义服务器控件