asp.net控件开发基础(2)
作者:佚名 出处:网络转载 时间:08-01 点击:
内容载入中...
支持原创支持 upschool.com.cn
相信看过"ASP.NET服务器控件开发技术与实例"这本书的人,肯定看过上面的一段代码.
假设你不理解上面的流程(我也不一定理解,希望我的思路对你有帮助),我认为有一种很好的方式来理解上面的流程,跟大家分享一下.
现在抛开上面的代码,我们来建一个简单的页面,随意的拖几个控件到界面上,注意最后一个三panel控件,如下图
图三在服务器上运行这个页面,大家可以在控件树上看到下面画面
为了理解这个方法,我们来重写此方法,我们以第一次讲的CreditCardForm3控件为例
我们重写RenderControl方法,把Render方法的代码全部拷贝到RenderControl方法中,然后去掉Render方法
然后在ASP.net页面使用此控件,定义其Visible值为False
否则的话,此方法呈现的内容没有Visible值.为了更加深刻理解这一点,我们重写基类的RenderControl方法的方法.
base.RenderControl(writer); 你会发现在页面呈现时的控件有两个,一个在RenderControl方法方法输出,一个在Render方法输出,因为
base.RenderControl方法调用了Render方法,当设置控件Visible属性为False时,Render方法输出的内容被隐藏(未被呈现,而RenderControl方法输出的内容仍然存在.现在大家应该了解RenderControl方法的作用了吧.
如果服务器控件的 Visible 属性设置为 true,则向页呈现服务器控件的内容,所以一般情况下我们不重写此方法.因为一般控件都需要Visible 属性,除非特殊情况.
HTMLTextWriter预先输出的话,就丧失Visible的功能(说不定你就不需要这个功能,那时你就可以重写这个方法了)
(1)RenderControl方法先判断其Visible然后调用Render方法
(2) Render方法使用HTMLTextWriter将标记字符和文本输出然后调用RenderChildren方法
(3)RenderChildren方法判断当前控件是否有子控件,然后再调用RenderControl方法根据子控件的Visible值输出子控件.
我们了解上面三个方法后,就会知道,一般情况下,我们无须重写RenderControl方法和RenderChildren方法.所以最合适的就是重写Render方法了.说了一大堆.目的就是为了说明为什么要重写Render方法.
上次,忘了把代码传上了,不小心只上传了dll文件,不好意思.这次就写这么多.希望大家能够真正明白.大家可以适当的修改代码,这样你会发现更多.
参考文章:
如果有什么错误请大家指出,希望多跟大家交流^_^