asp.net原理笔记----页面控件类型,页面状况和asp.net编译过程
通过查看asp.net的整个生命周期之后
了解到在aspx的页面生命周期中
调用了BuildControlTree()方法生成页面控件树
之后再调用Rend()方法根据控件树生成html返回
aspx页面上有3种控件类型
1.html标签,在服务器端被当作字符串,不做特殊处理
2.runat="server"标签,那么在网站编译程序集的时候,该页面的后台类会自动创建一个Protect
修饰的服务器控件类对象(如:protected HtmlGenericControl divMsg;)
正是因为protect,在后台类中可以访问,在其子类前台类中也可以访问(注意:这个控件变量中有一
个Render方法专门根据该控件的属性来生成对应的html字符串)
例子:
protected HtmlGenericControl divMsg;
protected HtmlForm form1;
protected HtmlImage imgs;
protected HtmlGenericControl spanMsg;
protected string strName;
protected HtmlInputText txtName;
HtmlGenericControl主要对应非表单控件的标签
3.ASP服务器控件<ASP:Button>,此种控件必须放在runat=server的form中。服务器专属控件
与第二种控件的区别:runat="server"控件在后台访问时,其属性等都和html标签一样访问,
而ASP服务器控件在后天访问属性时像winform的控件一样访问,如:
1.后台是string(添加到控件树时时LiteralControl)类
2.runat="server"控件在后台生成的变量是HtmlForm等这些类
3.ASP服务器控件后台生成的是Button等这些类
根据不同的控件类型
将在生命周期中对应着不同的处理方式
这就是为什么服务器端的控件响应速度慢,html代码被当做字符串不做特殊处理原样返回当然比要经过一系列转换和生成的服务器控件响应速度快呀~
aspx的页面状况:
1.当页面上没有包含任何服务器端语言的时候(<%%>、 runat="server"),整个页面作为 文本
资源供程序集使用。
2.当页面中包含 <%%>和html代码字符串时,当前前台页面类里会自动生成一个 方法,这个方法
中 向一个写出器对象里 吸入页面的html代码,和执行 <%%>内的内容。
3.当页面中既包含<%%>、html代码字符、runat=server的html、服务器控件标签时,那么前台页
面类会为每个runatserver的控件都创建一个方法,并通过 buildControlTree方法来组织各个控
件的依赖(包含)关系
Asp编译过程:
Client->Server->.Net Framework->判断内存中是否有相应的机器码->有,则交给cup执行返回给上一层,没有,则判断c盘中是否有相应的中间代码文件->有,则交给jit编译生成机器码返回给上一层并存在内存中,没有则将对应的aspx文件和aspx.cs合并用中间语言编译成一个类返回给上一层并存在C盘中
如下图所示:
最新文章
- enote笔记语言(1)
- CentOS 6.5 PPTPD VPN服务器安装,解决807等问题。
- 第十一章 GUI 上
- Spring学习笔记—装配Bean
- ini_set 设置php配置项 在windows和linux下的不同
- paip.互联网产品要成功的要素
- centos7 安装及配置
- JSTL标准标签库
- AutoEventWireup解释
- EffectiveC#3--选择is或者as操作符而不是做强制类型转换
- 用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
- vue-devtools(vue 2.0)手动安装与使用 ? 如何处理Vue.js is detected on this page ?
- EHCache:Eelment刷新后,timeToLiveSeconds失效了?
- spring aop 的代理工厂
- 家庭记账本之微信小程序(八)
- boost 编写finger服务
- openssl生成签名与验证签名
- appium 搭建及实例
- 高级测试岗位面试题---MARK
- python学习笔记--装饰器
热门文章
- ACMUniversity
- Waifu2x测试
- 通过RHN网站给RHEL打补丁
- 使用java mail的网易smtp协议 发送邮件
- vs mfc 静态文本 改变字体大小
- hihocoder1236(2015长春网赛J题) Scores(bitset &;&; 分块)
- cloudflare 301 重定向设置
- 出现函数重载错误call of overloaded ‘printfSth(double)’ is ambiguous
- Centos的APK解包打包签名
- 使用Android Studio开发调用.NET Webservice 之初体验