WebForm运行的部分原理

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 12:16 点击:

 首先WebForm即web窗体包含两个页面文件:aspx前台页面和cs后台页面文件。通过反编译器Reflector我们可以看到在Dll程序集中前台页面和后台页面分别生成了两个不同的类,而且前台页面aspx类继承于后台页面CS类。
 

下面这个登陆的小例子是我们用的最多的:

在aspx前台页面的body模块中输入:

<span style="font-size:18px;"><body> 
 
    <form id="form1" runat="server"> 
 
        用户名:<input type="text"  id="txtName" runat="server" /><br /> 
 
        密 码:<input type="text"  id="txtPwd" runat="server" /><br /> 
 
        <input type="submit" value="登陆" /> 
 
        <input type="reset" value="取消" /> 
 
    </form> 
 
</body> 
 
</span> 
<span style="font-size:18px;"><body>

    <form id="form1" runat="server">

        用户名:<input type="text"  id="txtName" runat="server" /><br />

        密 码:<input type="text"  id="txtPwd" runat="server" /><br />

        <input type="submit" value="登陆" />

        <input type="reset" value="取消" />

    </form>

</body>

</span>
 

那么在cs后台页面中可以通过当前应用程序this点出来aspx页面中的id为txtName和txtPwd的标签控件,并获得他们的值:

string name = this.txtName.Value;

string pwd = this.txtPwd.Value;

 

问题:

1.cs为什么可以调用aspx页面中的控件?

2.aspx中的任何控件都可以被cs调用吗?

 

为了解决上面的两个问题,我们首先得从整体上明白ASP.net的运行原理:

 \

如上图所示,当一个浏览器向服务器请求一个aspx页面时的简体步骤如下:

A、服务器会首先创建前台页面aspx类的对象,因为前面我们通过反编译器看到了前台页面类继承与后台页面类,所以当子类(aspx类)被创建时,父类(后台页面CS类)也会顺便被创建。

B、 接着就会在前台页面类中调用ProcessRequest方法(PR方法不是在前台页面类中定义的,而是在Page类中定义的,因为CS类继承与page类,而aspx类又继承与page类,所以PR方法相当于aspx类的爷爷类中定义的)。

C、 在PR方法中调用BuildControlTree方法,把前台页面所有的html控件和runat=server的控件转成对应的控件对象并添加在前台页面类得Controls集合中(这里当前页面即aspx页面类是根节点),而且runat=server的控件对象会保存在后台CS类中的一个对应类型的变量中。

D、在PR方法中调用后台页面CS类的Page_Load方法,这个方法中的代码是程序员自己写的。

E、 最后再PR方法中调用Render_Controls方法,来遍历控件树中每一个节点的Render_Controls方法,生成完整的html代码

F、 把完整的html代码返回给浏览器。

 www.2cto.com

通过上面简单的描述,我们可以容易的得到前面保存的那两个问题的答案:

1.cs之所以能够调用aspx页面中的控件,是因为在调用后台cs页面类的Page_Load方法之前先调用了BuildControlTree方法,把前台aspx页面中的html控件和runat=“server”的控件转换成了相应的控件对象,并保存在aspx页面类中的Control集合中(当前页面aspx页面类作为根节点也存放在controls集合中),最后生成页面控件树对象。

2.并不是所有的 前台aspx页面类中的所有html控件都可以在cs中调用

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • 浅析.NET下XML数据访问新机制
      • asp.net 面试+笔试题目第1/2页
      • C# 邮件地址是否合法的验证
      • C#高级编程:数据库连接[1]
      • asp.net 设置GridView的选中行的实现代码
      • 经典C++程序1
      • IIS 自动回收导致后台定时器失效的问题解决
      • ASP.NET&#160;GridView列表代码示例
      • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1