Welcome 微信登录

首页 / 网页编程 / ASP.NET / asp.net控件开发基础(2)

asp.net控件开发基础(2)2011-01-08Clingingboy或许大家还对为何要重写Render方法存有疑惑,希望大家看看我举的例子,能够明白Render方法和其他两个方法的作用,然后真正明白为何一般情况下只须重写Render方法

我们知道我们每次编写控件时,都需要重写Render方法,我们发现在Control类中很多方法可以重写,但我们没有去重写他们,我们需要遵循一个原则,在需要重载的时候再去重写他们

我们还是先来看看与Render方法相关的两个方法

//RenderControl方法的基本实现
public void RenderControl(HtmlTextWriter writer)
{
if(Visible)
{
Render(writer);
}
}
//Render方法基本实现
protected virtual void Render(HtmlTextWriter writer)
{
RenderChildren(writer);
}
//RenderChildren方式基本实现
protected virtual void RenderChildren(HtmlTextWriter writer)
{
foreach (Control c in Controls)
{
c.RenderControl(writer);
}
}

相信看过"ASP.NET服务器控件开发技术与实例"这本书的人,肯定看过上面的一段代码.

假设你不理解上面的流程(我也不一定理解,希望我的思路对你有帮助),我认为有一种很好的方式来理解上面的流程,跟大家分享一下.

现在抛开上面的代码,我们来建一个简单的页面,随意的拖几个控件到界面上,注意最后一个三panel控件,如下图

图一

我们知道,每个控件都有Visible和EnableViewState属性,Visible用来设置控件是否被呈现.

图二

现在我们把button控件的Visible属性设置为flase,我们看到了我们预期的效果,接着请启用页面跟踪,这个很重要

图三

在服务器上运行这个页面,大家可以在控件树上看到下面画面

图四