首先WebForm即web窗体包含两个页面文件:aspx前台页面和cs后台页面文件。通过反编译器Reflector我们可以看到在Dll程序集中前台页面和后台页面分别生成了两个不同的类,而且前台页面aspx类继承于后台页面CS类。
下面这个登陆的小例子是我们用的最多的:
在aspx前台页面的body模块中输入:
那么在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代码返回给浏览器。
通过上面简单的描述,我们可以容易的得到前面保存的那两个问题的答案:
1.cs之所以能够调用aspx页面中的控件,是因为在调用后台cs页面类的Page_Load方法之前先调用了BuildControlTree方法,把前台aspx页面中的html控件和runat=“server”的控件转换成了相应的控件对象,并保存在aspx页面类中的Control集合中(当前页面aspx页面类作为根节点也存放在controls集合中),最后生成页面控件树对象。
2.并不是所有的 前台aspx页面类中的所有html控件都可以在cs中调用,而是只有包含在<form runat="server" ></form>标签中的控件,并且此控件也含有runat=“server”属性的控件才会在生成控件树时在后台的cs类中保存在对应类型的变量中,作为cs的成员。
分享到:
相关推荐
C# webForm 选课管理系统。可正确无误运行。
资源名称:DoNet学习-WebForm视频教程(30集)资源目录:【】7ab37727cfeaf3ac0e59eff10c664831【】WebForm状态_上午1复习页面生命周期复习Transfer【】WebForm状态_上午2ViewState使用以及原理【】WebForm状态_上午...
SQLite WebForm Demo
webform AJAX DEMO演示代码例子
简单webform仿Winform TabControl标签页 ,用js实现
C# .net webform 项目,运行后地址 无aspx 后缀。完整源码。
.net实现webform HTTP文件上传
很多时候Windows程序也需要用到图文并茂的效果,也希望能类似webform中的htmleditor那样,这里提供一位高人写的控件,很好用。
WebForm打印
asp.net中webform 多选下拉框DropDownlist
WebForm调用WinForm源码 源码描述: 一、源码特点 ... 1、运行webform项目后,点击button按钮,即可成功调用winform窗体并弹出 三、注意事项 1、开发环境为Visual Studio 2010,使用.net 4.0开发。
用WebForm制作的自定义分页控件,可以将数据源分段显示在指定的数据绑定控件上。
c# webform无刷新前后台交互
c#客户服务.net webform 源码
WebForm的EasyUI 有需要的朋友可以下载,带数据库脚本. 先操作'数据库.sql',再打开EasyUI.sln 去Web.config 调整下,即可运行,如有不明白的可留言我
C#基于WebForm的学员管理系统源码.zip
autofac webform asp.net最好的注入工具
c#售书系统(webform)
本网站使用的是.net Webform框架开发,主要功能是记录一些笔记使用,比如设备的维修笔记等等。数据库使用的是 sqlserver 2008 . 花费了很多业余时间做的。写的代码也比较乱,技术有限,代码比较直观,或者说就是简单...
包括 分页控件,验证码控件,密码强度检测等,还包含了一个FreeTextBox的源码