ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题
这显然是一个非常明智而且很早就应该实现的做法,因为已经在HTML中声明为runat="server"的控件,就应该算是声明过,还要在code-behind中同步的用C#代码再声明一个同名控件显然是违反了《程序员修炼之道》中所谓的DRY(Don't Repeat Yourself)原则。
原本ASP.NET 1.x的编译模型是编译站点时先编译code-behind部分,然后得到code-behind部分的Page派生类,等到运行时再编译aspx部分此事得到code-behind部分的派生类(也就是Page的二级派生类),而一旦aspx和code-behind出现控件声明的不同步那么这个继承关系将出现问题。
ASP.NET 2.0的做法就是把aspx和code-behind都看作Page派生类的partial class,并且合成编译,而aspx中所有的控件声明都将在编译时自动转换为C#声明,这样的好处是只有一层Page派生类而且不用同步什么东西,所有东西都是仅声明一次。不过有一个问题就是,到底aspx中的声明是转换为C#的partial class再编译还是能够直接编译呢?转换为C#编译是很直接的思路,ASP.NET 2.0 的内部变化也是说原本由VS.NET 2002/2003做的声明同步工作现在交给ASP.NET Runtime了,但是这样就有一个问题,如果要开发一种新的ASP.NET语言(例如Delphi for ASP.NET 2.0),那么也就必须建立aspx到该语言的翻译,这是十分麻烦的事情。但是如果aspx和code-behind分开编译的话,这好像超出了partial class的能力范围,根据C# 2.0的规范,partial class的所有部分必须是同时编译的,不可以是增量编译的,也不可以是跨语言编译的,而aspx和code-behind都直接编译的话就需要双语言编译,也就需要增量编译。
ASP.NET 2.0还有一个很好的地方,就是部署编译,你能够把整个网站都编译了(包括aspx和code-behind)然后发布,发布目标的aspx将是一个仅引用后台类的控文件,这样性能最好而且也不用担心代码泄漏(特别是编译后的dll再混淆一下的话)。不过因为aspx部分也编译了,所以这样发布的网站发布之后就不能改动。而ASP.NET 2.0还提供另一个极端,就是完全运行时编译。以前ASP.NET 1.x如果是code-behind的话,code-behind部分就必须在VS.NET里面先编译,不过现在ASP.NET 2.0能够自动监测code-behind部分是否有改动过(甚至是/App_Code目录下的其他非UI逻辑的code),如果有就运行时编译,这对于调试来说是挺方便的,不需要每次调时前先在VS.NET里面按Ctrl+Shift+B编译。
ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题相关推荐
- ASP.NET 2.0 – 如何巢状化GridView控件 (转自章立民CnBlogs)
ASP.NET 2.0 – 如何巢状化GridView控件 图表 1 最近听到有许多朋友询问如何以巢状方式使用GridView控件,也就是说在GridView控件中再内含另外一个GridView控件. ...
- ASP.NET 2.0 中的新增服务、控件与功能概述(四)
原文出自http://blog.sina.com.cn/s/blog_48b6cd65010004fc.html 个性化 另一个新增的服务是个性化,它提供了一种现成的解决方案,用于解决存储站点用户的个 ...
- 在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField
英文原版 | 本教程的代码(C#) | 翻译目录 | 原文目录 导言 GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到 ...
- ASP.NET 2.0 – 如何巢状化GridView控件
图表 1 最近听到有许多朋友询问如何以巢状方式使用GridView控件,也就是说在GridView控件中再内含另外一个GridView控件.我们最近在撰写ASP.NET AJAX一书时,刚好撰写了一个 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇
第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇
第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.N ...
- operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍
两年前,曾打算自己开发一个web开发框架,把部门.人员.权限.日志作为基本服务加入进去,在其基础上可以做业务快速开发,结果没有坚持下去,仅仅开了个头就夭折了.究其原因,一方面是采用自己完全不熟悉的新技 ...
- 浅谈ASP.NET 4中构造“.NET研究”HTML5视频控件
在本文中,将一步步地指导你如何使用Visual Studio 2010和ASP.NET 4的相关知识,打造一个基于HTML5标准规范的视频播放控件,其中你会学习到一些关于HTML 5的知识,还会学到如 ...
最新文章
- linux 进程 内存 换入换出,linux - 在从bash进程替换完成输入后,如何继续发送到stdin? - 堆栈内存溢出...
- MySQL数据库数据类型以及INT(M)的含义
- 在Entity Framework中使用存储过程(一):实现存储过程的自动映射
- C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace
- 《C语言点滴》一1.5 内功修炼
- Direct2D教程(二)来看D2D世界中的Hello,World
- LG P990开机黑屏,但能进入系统的解决办法
- 思科为其核心网络业务增加了订阅服务
- 利用C/C++实现较完整贪吃蛇游戏
- 关闭Xcode警告 (强迫症还在等什么!)
- SpringCloud 从菜鸟到大牛之二 服务注册与发现 Sping Cloud Eureka
- 错排问题(以航电OJ 2048 为例)
- 四种数据库特性对比(Redis/Mysql/SQLite/MongoDB)
- 张北草原和锡林郭勒草原区别_草原:比您不知道的恶魔还强
- sklearn- 一元线性回归
- win7美化_桌面美化之 windows10
- 联想跨国收购余震:摩托罗拉裁员千人
- python报错:SyntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file
- MySQL之数据类型、建表和六大约束
- A Tutorial on Learned Multi-dimensional Indexes
热门文章
- Verilog | HDL 音乐流水灯(代码类)
- shtml与php的区别,htm,html.shtml区别
- 设置字的间距php,css letter-spacing设置字间距属性
- X 039 0203 039 mysql_2020年寒假假期总结0203
- python用变量输出abcd_python中星号变量的几种特殊用法
- mxnet基础到提高(44)-ndarray.arange创建行向量
- 【机器学习基础】理解关联规则算法
- 【论文解读】百度提出新冠高风险小区预警算法,AAAI21收录!
- 【NLP】BERT蒸馏完全指南|原理/技巧/代码
- 算法工程师的效率神器——vim篇