博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net组件(4):页面跟踪,了解一些原理

Posted on 2007-12-18 19:23  a-peng  阅读(422)  评论(0编辑  收藏  举报
首先往Web窗体中拉入几个控件.

有4个控件组成.label button panel中含textbox
将label的Visable设为false即,使其不被显示.
然后开启跟踪,运行程序


得到以下数据


我们看到很多个LiteralControl控件,这个是用来做什么呢?我们没有添加这个控件呀?
其实这是asp.net程序代码中的空白部份.
比如:
<asp:TextBox id="txt1" runat="server" />
<asp:TextBox id="txt2" runat="server" />
两个控件之间就有了空白了.LiteralControl控件就在他们之间
比如:
<asp:TextBox id="txt1" runat="server" /><asp:TextBox id="txt2" runat="server" />
两个控件之间就没有了空白.也就没有了LiteralControl控件喽.不信可以自己试一试啊.

回到正题:
可以看到 Label1的呈现大小字节数为 0 由于其Visable设为false所以不被呈现,当然呈现大小为0喽.
Button1 被呈现,大小字节数为66
我们主要观察Panel1 与其中的 TextBox1 127 和 51
我们来看看其回发后的大小,就可以看出系统是如何保留数据的.

输入一些数值,点Button.触使回发.


Panel1与其下的TextBox1的大小发生改变 从127 和 51 变成 146 和70 数据增大.
说明了,客户端把数据通过ViewState发给Asp.net,系统保留了数据.绘制它们.

学会了这些之后,我们也可以来测试下
RenderControl
Render
RenderChildren

查看组件(3)中的代码片段.
protected override void RenderChildren(HtmlTextWriter writer)
{
            //foreach (Control c in this.Controls)
            //{
            //    c.RenderControl(writer);
            //}
}
注释掉以上4行.使控件不能绘制子控件.
我们推断UseComponent1下的子控件ctl05呈现大小应该为0
跟踪下验证结果是否正确:

结果正确.

去掉以上4行注释.运行程序,使其能绘制子控件.
我们推断UseComponent1下的子控件ctl05呈现大小不为0
跟踪下验证结果是否正确:

为10正确.