Inherts

    在http://mqingqing123.cnblogs.com/archive/2006/01/14/317162.html
里,我介绍了CodeFile来取代Codebehind,可能你会感觉疑惑:ASP.NET工作组花费了很大的时间建立了与.NET1.1不同的后台文件模型,为什么没有更改.NET1.1的Inherits呢?
其实,我感觉是.NET2.0设计时主要为了和ASP.NET1.1的兼容,才不得不使用Inherits。

    对于熟悉ASP.NET1.1并一直使用VS.NET2003的用户来说,他们已经习惯了.NET1.1的web开发模型,这种“习惯”并不仅仅意味这双击Button,系统直接定位到Button按钮的事件处理中,更为主要的是习惯了.NET1.1在部署WEB应用程序的方便:在部署应用程序里,当您将本地开发的程序上传到ISP供应商为你提供的空间里时,您仅仅需要将*.aspx和bin文件夹下的*.DLL文件拷贝到你的空间就可以了,而对于类似*.aspx.cs和*.aspx.resx您可以忽略不计。
    如果您以后想升级应用程序也非常简单,只要将升级后的DLL文件覆盖原来的DLL文件即可。

    然而,在ASP.NET2.0里,正如上篇文件介绍的,*.aspx文件和*.aspx.cs文件都是不完全类(partial class),这就使得想在部署web应用程序前预先编译 *.aspx.cs变得不可能---这是由于这个条件的限制使得ASP.NET2.0默认是不能够将后台文件编译为二进制的DLL文件的。所以web开发人员在部署.NET2.0的应用程序时,只能够拷贝所有的源代码。
    因此,当您使用VS.NET2005进行web开发时,默认的,如果您需要将生成的源代码(*.aspx.cs)连同布局文件(*.aspx)一同拷贝到服务商给你提供的web空间里。

    现在,您是不是对ASP.NET2.0的模型感觉到遗憾?至少我是,看看类似CommunityStarter、blogs的源代码,他们的源文件是如此的多,如果您拷贝到服务器给你提供的空间,需要非常的费时,而在.NET1.1里,我仅仅需要拷贝几个DLL文件就可以了,看来ASP.NET2.0的框架确实存在很大的局限性。

    不过,别着急,问题出现了总需要解决,这个解决办法就是扩展:ASP.NET1.1的Page指令里也就那几个主要的属性,进入CodeBehind已经由CodeFile取代,那么微软的那些程序员就只好拿Inherits开刀--继续保留Inherits以便和.NET1.1兼容。----这应该就是为什么.NET2.0仍然保留Inherits关键字的原因。
    但是接下来还有一个问题:对于同样是.ASPX文件,我们知道.NET1.1的页面可以再.net2.0里运行,那么.NET框架怎么识别用户开发的*.ASPX页面是.NET1.1版本的还是.NET2.0版本的呢?
    这个问题就是由Code*解决,如下:
(1)如果您在Page指令里使用了 CodeFile属性,.NET框架自动认为您采用的是.NET2.0技术,后台文件也默认是不完全类
(2)如果您在Page指令里使用了CodeBehind属性,.NET框架自动认为您采用的是.NET1.1技术,后台文件的类直接作为页面的基类
(3)还有一个默认的,就是您的*.aspx里即没有CodeFile也没有CodeBehind,那么系统如何认为呢?在这种情况下系统仍然认为您是使用.NET1.1的框架技术,其实本人感觉这还是为了考虑兼容性,因为.NET1.1版本里就可以省略CodeBehind,如果让.NET1.1和.NET2.0高度兼容就必须始终以.NET1.1为目标。

    知道了页面如何区分页面后,解下来继续上面的问题,如何解决部署难的问题。在ASP.NET2.0里,提供了一个新命令aspnet_compiler.exe,默认的您可以在系统盘里找到,例如我的winXP系统里的默认位置在 c:\windows\microsoft.net\framework\版本号 目录里。

    aspnet_compiler.exe的使用较为复杂以后会介绍,以后会介绍,在用它之前先介绍它的基本功能。aspnet_compiler.exe会将文件全部编译为二进制文件:清注意这里是全部,也就是使用该编译器后*.ASPX和*.ASPX.CS全部编译为*.DLL,原因还是前面介绍的那个规则:不管什么时候,要编译为DLL文件,都必须提供完整的类。
    现在您可以知道ASP.NET2.0的高明了吧,在部署ASP.NET应用程序时,您可以有三种方式:
(1)传统ASP.NET1.1方式:布局代码*.ASPX和编译后的后台bin文件夹下的DLL文件(部分代码+部分二进制)
(2)默认ASP.NET2.0方式:所有布局代码和所有后台文件以源文件的形式存在(全部源代码)
(3)改进后的ASP.NET2.0模式:此时所有布局代码*.ASPX和后台文件*.ASPX.CS都是以DLL的形式存在。(全部二进制)

    最后,还要说一下全部编译后的二进制的问题,当你编译后可以发现有一个default.aspx文件,可能你会问既然全部是DLL文件为什么还要default.aspx文件呢?这个文件也没有内容,会不会是多余的?
    要理解这个问题就需要转到IIS了,换句话说这就不再是ASP.NET2.0的工作范畴了。
对于客户端请求,IIS首先会根据映射检查您所请求的文件存在不存在,如果不存在就直接提示您所请求的文件没有找到。    可以看到此时ASP.NET2.0框架还没有接管呢,解决这个文件最简单的方法就是不用检测文件是否存在,参考下图(,默认检查文件是否存在是选中的,更为详细的原因,可以参考.BLOGS配置),但是这个步骤虽然不复杂,可以对于许多应用程序来说都需要更改显然非常不现实,现在好了只要有了DEFAULT.asxp不用更改IIS配置也可以了
所以,默认还是需要default.aspx的。


sfaer.JPG

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通孔的作用是什么linux,电路板空洞的作用是什么 如何区分PTH与NPTH两种通孔

如果你有机会拿起一片电路板,稍微观察一下会发现这电路板上有着许多大大小小的孔洞,把它拿起来对着天花板上的电灯看,还会发现许多密密麻麻的小孔,这些孔洞可不是放在哪里摆好看的,每个孔洞都是有其目的而被设计出来的…

Django Step by Step中文版,推荐一下

Diango是Python的一个快速Web开发框架,称为Python的ROR,在limodou的Blog里已经推荐了很久,元旦前后也学习了一下,最近很懒,什么都没有干。文档地址:http://www.woodpecker.org.cn/obp/django/django-stepby…

关于mysql修改密码 set password for root@localhost = password(‘xxx‘);报错解决方法

mysql> SET PASSWORD FOR rootlocalhost PASSWORD(123456); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near PASSWORD(123456) at line 1 通过下面的命令…

【BootStrap】 概述 CSS

BootStrap BootStrap由Twitter开发,基于HTML,CSS,JS,是一套前端框架。它的特点是对浏览器良好的支持(目前市面上所有流行浏览器都可以),兼容移动设备,以及响应式设计(响应式CSS自适应于各种设备…

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains解决

1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column btc.a.applicant_unit which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 执行下如下语句&…

SQL server中DateTime类型字段如何赋值零?

.net 1.1 不支持Sql Server datetime字段为空的情况.net 2.0 开始支持Sql Server datetime字段为空在不支持datetime为空的情况下,Sql Server数据库一般是选择一个特定的日期代表空值,默认的情况下,是1900-1-1

Java DO到DTO转换利用spring 的BeanUtils.copyProperties

Java DO到DTO转换利用spring 的BeanUtils.copyProperties() public static <T> List<T> copy(Object sourceList, Class<?> beanClass) throws Exception {List<Object> sList (List<Object>) sourceList;List<Object> tList new Arra…

java 反射(Reflection) 详解

jAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 众所周知哈 ja…

终于可以放下心来了,呜呜...

从上周六开始到今天早上&#xff0c;一直在为开题报告的事情受煎熬。想题目想了一天半&#xff0c;实际写出来也就半天的时间差不多&#xff1b;交上去了之后还要担心着是不是会打回来重写。。。呜呼。。。 终于早上等到了回复&#xff0c;得到了自己想听的那些话&#…

mac上安装zookeeper教程

下载 下载tar包解压&#xff0c;推荐使用3.5.9版本&#xff0c;不要使用3.6以上的高版本&#xff0c;它jdk1.8冲突&#xff0c;也不要直接brew install zookeeper--默认最高版本 国内镜像下载地址&#xff1a; http://mirrors.hust.edu.cn/apache/zookeeper/stable/ 下载 ap…

在UnitTest中读取*.config文件的郁闷

- -Visual Stuido 2005集成了Unit Test功能后&#xff0c;创建和管理Unit Test变得比原来简单多了&#xff0c;并且独立项目的Unit Test模块和代码不会再"残留"于我们的dll中。不过VS 2005 Unit Test运行方法的原理和其他的Unit Test框架一样&#xff0c;也是使用反射…

JQuery系列(4) - AJAX方法

jQuery对象上面还定义了Ajax方法&#xff08;$.ajax()&#xff09;&#xff0c;用来处理Ajax操作。调用该方法后&#xff0c;浏览器就会向服务器发出一个HTTP请求。 $.ajax方法 $.ajax()的用法主要有两种。 $.ajax(url[, options]) $.ajax([options]) 上面代码中的url&#xff…

android自定义渐变色,Android设置背景渐变色

效果如图&#xff0c;本章只谈背景渐变色&#xff0c;仪表盘下一篇文章实现步骤&#xff0c;只需两步&#xff1a;1.在res/drawable中新建一个gradual_color_bg.xml内容如下&#xff1a;android:startColor"#aa000000" 渐变起始色值android:centerColor""…

mac安装npm

brew install node npm install 打包 启动项目 npm run dev 1、npm介绍 npm是基于nodejs的包管理器 从npm服务器下载别人编写的第三方包、模块到本地使用 从npm服务器下载安装别人编写的命令行程序到本地使用 将自己写的包、模块或者命令行程序上传到npm服务器、共别人下…

tarjan求LCA模板

废话不多说&#xff0c;模板拿来。 1 # include <iostream>2 # include <cstdio>3 # include <cstring>4 # include <string>5 # include <cmath>6 # include <vector>7 # include <map>8 # include <queue>9 # include <c…

mac安装dubbo-admin

访问 https://github.com/apache/dubbo-admin 1&#xff1a;找到dubbo-admin git下载地址 2:git下载项目 3:执行 mvn clean install 执行 zmvn clean package -Dmaven.test.skiptrue 执行 java -jar dubbo-admin-0.3.0-SNAPSHOT.jar mac电脑安装npm 执行 brew install …

Mac下使用终端查看某个端口号对应的进程和杀死进程

查看端口号对应的进程 打开终端&#xff0c;输入lsof -i tcp:port&#xff0c;port即为端口号&#xff0c;如8080 如回车之后结果如图&#xff1a; 使用kill -9 PID

创建基于AJAX技术的Scribble应用程序

简介ASP.NET Atlas是一套丰富的类库&#xff0c;用于ASP.NET开发AJAX风格的应用程序。本文试图解说Atlas框架的一般性特征&#xff0c;由于Atlas是一个庞大的库&#xff0c;故本文集中探讨Atlas的两个最重要的特征&#xff1a;1. 能够从客户端脚本中调用服务器端web服务2. 使得…