这显然是一个非常明智而且很早就应该实现的做法,因为已经在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 需要控件声明同步的问题相关推荐

  1. ASP.NET 2.0 – 如何巢状化GridView控件 (转自章立民CnBlogs)

    ASP.NET 2.0 – 如何巢状化GridView控件 图表 1 最近听到有许多朋友询问如何以巢状方式使用GridView控件,也就是说在GridView控件中再内含另外一个GridView控件. ...

  2. ASP.NET 2.0 中的新增服务、控件与功能概述(四)

    原文出自http://blog.sina.com.cn/s/blog_48b6cd65010004fc.html 个性化 另一个新增的服务是个性化,它提供了一种现成的解决方案,用于解决存储站点用户的个 ...

  3. 在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField

    英文原版  |   本教程的代码(C#)   |   翻译目录   |   原文目录 导言 GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到 ...

  4. ASP.NET 2.0 – 如何巢状化GridView控件

    图表 1 最近听到有许多朋友询问如何以巢状方式使用GridView控件,也就是说在GridView控件中再内含另外一个GridView控件.我们最近在撰写ASP.NET AJAX一书时,刚好撰写了一个 ...

  5. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  6. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...

  7. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

    第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.N ...

  8. operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍

    两年前,曾打算自己开发一个web开发框架,把部门.人员.权限.日志作为基本服务加入进去,在其基础上可以做业务快速开发,结果没有坚持下去,仅仅开了个头就夭折了.究其原因,一方面是采用自己完全不熟悉的新技 ...

  9. 浅谈ASP.NET 4中构造“.NET研究”HTML5视频控件

    在本文中,将一步步地指导你如何使用Visual Studio 2010和ASP.NET 4的相关知识,打造一个基于HTML5标准规范的视频播放控件,其中你会学习到一些关于HTML 5的知识,还会学到如 ...

最新文章

  1. linux 进程 内存 换入换出,linux - 在从bash进程替换完成输入后,如何继续发送到stdin? - 堆栈内存溢出...
  2. MySQL数据库数据类型以及INT(M)的含义
  3. 在Entity Framework中使用存储过程(一):实现存储过程的自动映射
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)regex_replace
  5. 《C语言点滴》一1.5 内功修炼
  6. Direct2D教程(二)来看D2D世界中的Hello,World
  7. LG P990开机黑屏,但能进入系统的解决办法
  8. 思科为其核心网络业务增加了订阅服务
  9. 利用C/C++实现较完整贪吃蛇游戏
  10. 关闭Xcode警告 (强迫症还在等什么!)
  11. SpringCloud 从菜鸟到大牛之二 服务注册与发现 Sping Cloud Eureka
  12. 错排问题(以航电OJ 2048 为例)
  13. 四种数据库特性对比(Redis/Mysql/SQLite/MongoDB)
  14. 张北草原和锡林郭勒草原区别_草原:比您不知道的恶魔还强
  15. sklearn- 一元线性回归
  16. win7美化_桌面美化之 windows10
  17. 联想跨国收购余震:摩托罗拉裁员千人
  18. python报错:SyntaxError: Non-UTF-8 code starting with ‘\xe6‘ in file
  19. MySQL之数据类型、建表和六大约束
  20. A Tutorial on Learned Multi-dimensional Indexes

热门文章

  1. Verilog | HDL 音乐流水灯(代码类)
  2. shtml与php的区别,htm,html.shtml区别
  3. 设置字的间距php,css letter-spacing设置字间距属性
  4. X 039 0203 039 mysql_2020年寒假假期总结0203
  5. python用变量输出abcd_python中星号变量的几种特殊用法
  6. mxnet基础到提高(44)-ndarray.arange创建行向量
  7. 【机器学习基础】理解关联规则算法
  8. 【论文解读】百度提出新冠高风险小区预警算法,AAAI21收录!
  9. 【NLP】BERT蒸馏完全指南|原理/技巧/代码
  10. 算法工程师的效率神器——vim篇