这世界有好多好多无聊的人,就像我。因此有了这些无聊的,危险的,独特的笔记。不可否认,我是一个天才,但是,总是找不到证据,奇怪了...
ASP.NET 2.0总算发布了正式版本。而我也在第一时间下载了Framework和SDK。现在,我正在以我的无比强壮的英语(同样没有证据)和无敌的金山词霸200X版进入ASP.NET QuickStart。
据说我是从来不说废话的。微软的Visual Studio 2005虽然看起来像是比测试版的时候帅得多,但是实际上,他还是很快淹没了公司提供我的可怜的512M内存,当然,我是说在关掉了之后。而恐怖的Maxthon浏览器则是动不动的脚本错误,或者根本就不出错。不管是可怜的CSDN Blog还是我伟大的Javascript游戏,都被他谢绝了部分,他总是那么谦虚,唉。人生不如意者,十有八九啊。以下乃正式内容,请各位观众及时关闭,以免造成太大的愤怒,本人就罪大了,善哉...
请各位不要怀疑我是从New这样的字里面找来的东西,因为根本就是了。
首先,要提的是动态编译。ASP.NET 1.1中的Code Behind实际上aspx页面是aspx.cs文件创建的类的子类。而ASP.NET 2.0中由于引入了partial这种东东。(partial加在class前,可以将一个类放在多个文件中编写)因此Code Behind实际上跟aspx页面共同编译成一个类,因此,我不得不把该死的后缀名为cs的文件公开放置于网站下面。
但是,实际上并不是这样的,首先我发现了Page指令中的Inherits属性,为什么还是Inherits?从Visual Studio 2005的Build菜单中发现了Public Web Site一项,使用后发现OK,生成了Bin,并且里面有个以App_Web_开头的dll,名字是不固定的。于是我修改.aspx文件的内容,为其增加一个服务器控件,再次浏览该页,一切正常。
Code Behind还是父类!猜想在编译的时候编译器将aspx文件编译成一个临时的cs文件再将其和CodeFile文件合并生成父类。而运行时aspx文件又是它的子类,有趣啊,乱伦?不过看来,以上的两种方式就是ASP.NET的动态编译和预先编译。但是,更让人郁闷的是,CodeFile中的方法只能是public或者protected,也就是说,在编译时生成的类中并不包含事件的挂钩(Page_Load除外,Page_Load可以是private)。而是在aspx中指定,可能是为了灵活性吧。
同样的,可以将其它的cs文件放在App_Code目录下来动态编译,而发布后将生成App_Code.dll。事实上,VS.NET 2005只允许将其它的类(.cs)文件放在App_Code底下,放在其它位置将不会被编译。而现在的生成菜单似乎仅仅检查语法而已了,反正是不会生成什么看得到的东西了。
其它的方面,如新增的大量的服务器控件啊,还是我最喜欢的$绑定<%$ ... %>(从配置或资源文件中读取数据)好像没有什么好说的(有的话留着后面说吧),那就到此吧。顺便提一下,本系列的编号将根据QuickStart来完成,当然,完成了QuickStart的学习后还可能有其它的,那是后话,不提。