伴随着VS2010的公开测试,ASP.NET4.0也进入了我们的视线。ASP.NET4.0究竟给我们带来了什么,将在哪些方面提高我们的生产力?

  在何时你需要使用ASP.NET4.0开发你的网站程序?

  • 需要更严格的遵守Web标准;
  • 需要更流畅的Web Form开发方式;
  • 需要更好的搜索引擎优化;
  • 需要后知后觉的纠正一些不够优良的设计,这些设计甚至可能是在ASP.NET 1.0发布之前就存在的;
  • 需要将现有的功能重新改造为支持server farm或跨application domains;
  • 需要将.NET调节和重组为一个整体。

  你不需要学习复杂的设计模式或各种SEO技巧,甚至不需要有代码重构的能力。忘记那些复杂的规定和教条吧,使用ASP.NET4.0提供的各种方便又实用的新功能,你将能轻松的开发/升级出与时俱进的高质量的程序。而这一切均需要从这里开始:

VS2010带来了一个新的预定义设置:Web Development(Code Only),如字面所示,它是为了web开发而设计的,但与普通的Web Development模式不同的是,它针对的是喜欢手写代码的开发人员,它让VS看起来更像一个单纯的IDE:

至于您是否喜欢,就萝卜青菜,各有所爱了。。。(我还是喜欢全屏模式。。)

  • 新的项目类型:

VS2010对ASP.NET的项目类型做了大量的更改,具体改动如下:

  1. ASP.NET Web Service Application被完全的移除了;
  2. .Net3.0 带来的 WCF Service Application 移至 WCF projects 下;
  3. .Net3.5 SP1 带来的两个 Dynamic Data 相关的项目被改为更容易理解的名称,例如 Dynamic Data Web Application 使用LINQ to SQL替换了之前的Entity Framework;
  4. MVC项目有了一个称为 ASP.NET MVC2 Empty Web Application 的新选择。新的 ASP.NET MVC2 Empty Web Application 项目会建立如下的内容:标准的目录(空),空白的global.asax文件,web.config文件,标准的jQuery和MS AJAX库。相比较而言,ASP.NET MVC2 Web Application项目会生成一个可工作的网站,实现一个简单的membership模型,生成并使用master page,error page及所需的content page,并且可以生成一个示例test project。这对MVC新手非常有帮助,可以较为全面的使用MVC的功能。
  • 简洁的Web.Config文件

在VS2008SP1中,默认的web.config文件代码有139行,而在ASP.NET4.0中,web.config 文件只有6行:

原理很简单,ASP.NET团队对web.config文件进行了重构,将通用的设置写进默认的机器级别的web.config中。只剩下两个需要频繁变化的设置项。

  1. debug的值在Web Application 项目中会被默认设置为true,在Web Site 项目中会被默认设置为false。
  2. targetFramework的值可以设置为:4.0,3.5,3.0和2.0。这个选项会被IIS识别并自动赋予ASP.NET程序池相应的Framework版本。
  3. Intellisense在旧版的web.config中会不起作用。可以通过删除原web.config中configuration的namespace(xmlns)属性就可以了。

*.config文件的层级结构:

在新的config文件定义中,一系列功能例如:Dynamic  Data,routing与charting全部默认开启。

关于不同级别的config文件的关系,非常类似与CSS文件的复写。简单的来说就是离你越近的config权值越高,也就是最底层的machine.config权值最低,你新建的web项目中的web.config的权值最高。

  • root的config文件为machine.config,位于C:\Windows\Microsoft.NET\Framework\ v4.0.xyz\Config。
  • 机器级别的web.config文件同样位于上面的那个目录,它在machine.config文件的基础上定义了web特定的一些节点的默认值,也就是在之前的ASP.NET版本中创建项目生成的web.config的文件中的那些值。
  • 同样在上面那个目录中,你会发现如下的文件:web_hightrust.config, web_mediumtrust.config, web_lowtrust.config 和 web_minimaltrust.config。如果你的站点的信任级别不是“FULL”,将会使用对应的config文件作为默认值。
  • 在你创建的项目中,会默认生成一个web.config文件,这也是我们通常所说的web.config文件。
  • 在你的项目的任何目录中,你都可以添加一个web.config文件,这个文件中的值会覆盖项目根目录中的值。你可以利用这个特性做一些例如权限限制之类的功能。
  • Config Transformation Files

这个新功能是为了应对同一个网站在不同服务器需要不同的web.config文件的问题,例如需要不同的connectionstring等。在以前我们可能很难维护这些不同的web.config文件(在我经历的项目中,为了解决这个问题,使用了com组建读取注册表,在不同机器的注册表中写入相应的信息),而现在有了这个新功能,我们可以以编程的方式统一的解决和处理这个问题(基于XPATH技术)。你只需要在web.config文件上右键单击,并选择“Add Config Transforms”即可。

  • Browscap.ini

对于使用过ASP的程序员来说,应该对这个文件并不陌生。这个文件是用来记录所有要使用的浏览器,以及这些浏览器所支持的特性(例如是否支持activeX)。

在.NET2.0中,微软将browsercap.ini的功能分割为一系列的*.browser文件。当收到一个请求的时候,我们就可以根据这个请求发起的browser找到对应的browser文件来获取浏览器的能力。这些数据会被传递到HttpBrowserCapabilities对象中,我们就可以使用这些数据了。

所有的browser文件可以在C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers下被找到。里面其实还是挺齐全的。

将一个文件分割成一系列文件会造成更加难以维护的情况,但这么做的理由似乎也不难猜想,就是微软希望一系列的浏览器使用同一个文件,例如ie.browser, mozilla.browser之类的。

在.NET4.0中,微软继续沿袭了这一思路,并且大范围的更新了这些文件,以支持现在流行的浏览器,特别是移动浏览器:iPhones, Windows PhoneOS, Android等,并且不会把这些浏览器简单的处理成wap浏览器。对于桌面浏览器来讲,也添加了对Firefox,Chrome和Safari的支持。

这么做很好,但是问题来了,难道我们要等每个新的.Net Framework发布后才能获得这些新的文件吗?答案当然是否定的。

如今浏览器发展日新月异,马上又即将有IE9, Opera 10.5, Gecko 1.9.3和新的IE for mobilephone等等。如果我们希望支持这些新的浏览器,我们有四种选择:

  1. 手动更新这些browser文件或者创建新的browser文件。
  2. 创建一个新的browser文件并将它添加在你的站点的App_Browser文件夹下。但这样只对你当前的站点有效。
  3. 扩展现有的browser capabilities provider。
  4. 创建一个自定义的browser capabilities provider替换现有的。

你可以针对你所拥有的资源或网站架构来选择如何解决这个问题。我们推荐使用自定义的browser capabilities provider去解决,虽然需要更多代码,但一旦完成,之后的更新将会更轻松。这就意味着你能更迅速的支持新的浏览器。

但无论如何,支持一个新的浏览器都是一个困难的工作,但.NET4.0给我们带来的最新的browser支持文件和一个可扩展的方法。

  • 新的Page属性

任何ASP.NET开发人员对于@Page标签都不会陌生。好消息是ASP.NET4.0完全兼容之前版本所提供的42个属性。更好的消息是,ASP.NET4.0还带来了6个新的属性,以应对日益复杂的开发需求:

  1. ClientIDMode 顾名思义,这个属性用来定义ASP.NET将如何生成控件的客户端ID,如果你是一个前端开发人员,你将会明白能够确定的控制客户端ID的生成将带来多大的便利。可能的值为AutoID(default/current),Predictable,Static和Inherit。
  2. ClientTarget 用来定义页面将针对哪个浏览器来执行。这将覆盖ASP.NET提供的自动浏览器识别功能,可能的应用场景为比如我们只需要支持IE浏览器或只需要支持FIREFOX等。
  3. MetaDescription 顾名思义,用来生成页面的meta 的description标签。在我看来只是提供了一个更为官方的方法和方式,标准化了这一流程。
  4. MetaKeywords 顾名思义,用来生成meta的keywords标签。
  5. TargetSchema 用来定义验证页面所需的schema。这个标签只是用来标识的,并不会真正的执行。可以看作一种代码注释。
  6. ViewStateMode 用来定义页面的VIEWSTATE是opt-in还是opt-out(默认)模式。

总体来说变化不大,提供了一些呼声很高的功能。

  • 生成更纯净,更标准的HTML代码

这一直是ASP.NET中比较大的问题。ASP.NET1.1生成的html代码基本都不符合标准,这一点在ASP.NET 2.0中已经进行了改进,我们在web.config中引入了xhtmlConformance,用来定义控件将生成何种标准的HTML代码,默认为XHTML1.0 Transitional standard(Transitional)。相应的,我们可以将它设定为XHTML1.0 Strict(Strict)或者选择生成与ASP.NET1.1相同的HTML代码(Legacy,主要用来兼容从ASP.NET1.1升级而来的网站)。

不幸的是,在Legacy模式运行的网站与ASP.NET AJAX不兼容,而且尽管Transitional与Strict模式与XHTML标准兼容,但生成的代码对CSS也是非常不友好的。例如:

  1. menu用table输出而不是UL/OL。
  2. 服务器端的控件属性例如 border=0 或disabled=disabled 是强制的并且无法移除。
  3. 对于支持template的控件,你可以对template内的代码进行任何的自定义,但无法移除最外层的table标签。

ASP.NET3.5带来的ListView,DataPager和CSS Control Adapters控件带来了过渡性的解决方案,ASP.NET4.0完全将他们集成在新版本的System.Web中,使得微软可以使ASP.NET 4.0可以尽可能的对CSS友好。毋庸置疑,生成干净的HTML标签是ASP.NET 4.0的重要目标之一。

  • ControlRenderingCompatibilityVersion

与xhltmlComformance类似,ASP.NET4.0为web.config带来了这个新的属性。当设置为3.5时,一切将和原来一致,但当你设置为4.0时,控件将按照全新的模式输出HTML代码:

  1. xhtmlConformance被设置为Strict。
  2. menu将会用UL/OL的形式输出。
  3. 多余的HTML属性将被移除,甚至连validation的字体颜色也不会被设置为红色。
  4. 将可以对控件使用RenderOuterTable属性来控制是否输出外围的table标签。

在我看来这对于习惯使用控件的同学是个好消息。微软又帮你做了许多工作。

  • 新增的一些小功能

列举一些新增的细节功能

  1. 内置<asp:chart>。
  2. 三种新的Redirect方式:Response.RedirectToRoute(HTTP302), Response.RedirectToRoutePermanent(HTTP301)和Response.RedirectPermanent(HTTP301)。
  3. Inline的HTML encoded 字符串。
  4. Routing配置更便捷。

ASP.NET 4.0 来了的更多相关文章

  1. Log4Net异常日志记录在asp.net mvc3.0的应用

    前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual ...

  2. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法

    使用VS2010创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为使用 ASP.NET 4.0,按 F1 可了 ...

  3. 建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

    框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性 ...

  4. 用户 'IIS APPPOOL\ASP.NET V4.0' 登录失败 解决办法…………

    在iis管理器中-->应用程序池-->ASP.NET V4.0---->高级设置-->标识-->改为localSystem

  5. 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)

    一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...

  6. Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册

    系统升级到windows10 ,Visual studio 创建web应用程序时出现如下提示ASP.NET 4.0尚未在 Web 服务器上注册.为了使网站正确运行,可能需要手动将 Web 服务器配置为 ...

  7. ASP.NET 4.0 forms authentication issues with IE11

    As I mentioned earlier, solutions that rely on User-Agent sniffing may break, when a new browser or ...

  8. ASP.NET 4.0 potentially dangerous Request.Form value was detected

    A few days ago, while working on an ASP.NET 4.0 Web project, I got an issue. The issue was, when use ...

  9. Log4Net异常日志记录在asp.net mvc3.0的应用(转载)

    这篇博客写的很好:http://www.cnblogs.com/qianlifeng/archive/2011/04/22/2024856.html 前言 log4net是.Net下一个非常优秀的开源 ...

  10. IIS应用程序池添加ASP.NET v4.0

    可能在安装.NET Framewrok 4.0之前,IIS就已经装好了,结果在IIS的应用程序池中只有.NET 2.0的Classic .NET AppPool和DefaultAppPool.在使用v ...

随机推荐

  1. Android应用正确使用扩展SD卡,特别是安卓4.4以后的版本

    Android 开发时如何正确获取使用扩展存储路径 在 2.x 版本中,Android设备都是单存储,第三方App写文件,必须申请 WRITE_EXTERNAL_STORAGE 权限: 在4.0之后, ...

  2. OpenSSH 密钥管理:RSA/DSA 认证(转载)

    我们中有许多人把优秀的 OpenSSH用作古老的 telnet 和 rsh 命令的替代品,OpenSSH 不仅是安全的而且是加密的. OpenSSH 更加吸引人的特性之一是它能够使用基于一对互补的数字 ...

  3. Java Collections Framework

    集合OR 容器 通常我们会用数组去保存一些基本数据类型,数组是编译器支持的类型,但是数组的一个明显缺点就是具有固定尺寸,而在一般情况下,只有在程序运行的时候,我们才能知道要保存的具体数目. Java类 ...

  4. SQL2008-c:\PROGRA~1\COMMON~1\System\OLEDB~1\oledb32.dll出错找不到指定的模块

    MSSQL2000企业管理器里无法查询数据 SQL server无法执行查询,因为一些文件丢失或未注册等问题的解决直接在企业管理器里无法查询数据,但是用查询分析器可以查看数据,重装了SqlServer ...

  5. iOS7滑动返回

    [转载请注明出处] iOS 7中在传统的左上角返回键之外,提供了右滑返回上一级界面的手势.支持此手势的是UINavigationController中新增的属性 interactivePopGestu ...

  6. 转载.Net MVC中Html.RenderPartial和Html.RenderAction 的应用与区别

    Html.Partial方法:是将视图内容直接生成一个字符串并返回, Html.RenderPartial方法是直接输出至当前HttpContext, 而Html.RenderAction还调用一下A ...

  7. HDU 4628

    这是一个大水题啊... 因为比赛时不会算复杂度耽误半天. i从0到2^n枚举集合i的所有分割两半的情况的复杂度为O(3^n),可以想象这个过程相当于是给每个位标记0,1,2(0表示不选,1,2表示两个 ...

  8. jquery判断输入文字个数的统计代码

    1.js代码部分 <script type="text/javascript">             $(function() { function albumNa ...

  9. 【不积跬步,无以致千里】五个常用的Linux监控脚本代码

    为大家提供五个常用Linux监控脚本(查看主机网卡流量.系统状况监控.监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告.监控CPU和内存的使用情况.全方位监控主机),有需要的朋友不妨看 ...

  10. 【转】MyEclipse8.5集成Tomcat7时的启动错误:Exception in thread “main” java.lang.NoClassDefFoundError org/apache/commons/logging/LogFactory

    http://www.cnblogs.com/newsouls/p/4021198.html 今天,安装Tomcat7.0.21后,单独用D:\apache-tomcat-7.0.21\bin\sta ...