• Asp.MVC 各个版本比较(资源整合)与WebForm的区别


    首先说说

    MVC与WebForm的区别(来自birdshover的文章):

    使用ASP.NET MVC框架,创建默认项目,第一直观感觉就是地址都是Rewrite过的。对源码和配置文件稍加分析不难看出,MVC使用了httpModules来拦截地址请求,具体用到了System.Web.Routing类库(MVC2中,MVC1怎么用的忘记了。)而这部分类库被包装在.NET Framework3.5 SP1中,MVC2需要SP1支持也就理所当然了。SP1提供的System.Web.Routing类库可以方便地进行地址请求拦截,对编码处理方面也很优秀。UrlRoutingModule类拦截请求,在这之前,Application_Start的时候,会给RouteTable的全局对象一个拦截的设置。而这个设置使用RouteCollection对象进行保存,MVC对这个类进行了扩展——RouteCollectionExtensions。这些可以不考虑,接下来,当用户访问页面时,UrlRoutingModule类拦截请求,在RouteTable中查看是否符合规则,符合的话,就会调用MvcHandler,这个调用在httpHandlers配置节点被注册,条件是地址符合“*.mvc”规则。MvcHandler的ProcessRequest方法就会调用Controller来执行。事实上整个过程都是黑盒子,用户感觉不到。在Controller中某方法执行后,返回结果,再进入具体的aspx页面。

    分析了MVC的工作工程,就可以对比其与WebForm的区别了。我们知道,MVC模式的业务被放置到Controller中去执行,而aspx页面只负责显示。那么在MVC中的业务实际执行时间被提前到了HttpMolde中,而WebForm的请求只在httpHandler容器中被执行。也就是说MVC中Controller与View的分离是使用的ASP.Net请求管道隔离的,这样的话无疑在不影响效率(一次请求,而Response.Redirect是二次请求)的情况下达成了代码的逻辑层次的分离。


    图1 MVC工作模型

    MVC工作的优点是显然的,更加有利于理解分层逻辑,把握代码的层次感。Controller到aspx页面之间的过程,已经被框架隔离。至于Controller或者View页面与Model调用的过程,还是需要自己来把握。ASP.NET的MVC框架实现了Controller代码的单独管理。

    而看WebForm开发模型,则只在HttpHandler容器中执行,对其进行分层,在大的方面缺乏支持,而只能依靠逻辑上分离。并不是不能分离,而是由一定的局限性。HttpHandler的拦截,是跟访问后缀名有关的。当请求一个页面时,那就是一个Handler,而WebForm模型实现显示与逻辑分离,才有的是WinForm的事件驱动。显然,事件必须被注册到页面里,比如Button1_Click这样的代码。而在Button1_Click执行之前,Page_Load方法会被执行。显示代码被写入Page_Load方法中,那么就会造成需要写额外的废代码,比如if (!Page.IsPostBack)这样的判定。而在Button1_Click执行后需要显示的部分,则比较难处理,写出另一个方法,也是必须要在Button1_Click里调用的。替代的解决方案是使用Response.Redirect,在一个aspx页面中处理逻辑,处理完就跳转到另外一个显示的页面。这样做的坏处是,在两个页面中数据很难共享,而跳转是通过标记302来实现,因此多一次请求。而另外还可以通过Server.Execute,Server.Transfer或者Context.RewritePath这样的处理方式,则两个页面转换是在服务器端完成,可以共享数据,可以说和MVC框架的处理方式大同小异,缺点是需要手动配置这些重新定向的属性。

    从以上分析可以看出,MVC框架具有很强的优越性,而WebForm也不是一无是处,在简单的应用中更加容易开发。WebForm也是可以实现和MVC一样的分层方式,只是处理时需要多写一些代码而已。而我认为,在用WebForm开发分层遇到的最大问题是页面与页面之间数据的传递问题,而掌握好WebForm中使用服务器端跳转的应用技巧(Server.Execute,Server.Transfer或者Context.RewritePath)进行开发就可以解决数据传输问题,用WebForm开发比MVC框架更容易理解,不会产生复杂的配置,也是一个很不错的选择。

     

     

    当然asp.net mvc目前最稳定应用最多的版本也就是mvc 2.0,类似于silverlight 4.0一样。下面对3个版本进行比较概述:
    ASP.NET MVC 1.0 个人觉得可能会跟.NET FRAMEWORK 1.1一样,只是个过渡的版本

    从目前使用ASP.NET MVC 1.0的情况来看,ASP.NET MVC 1.0还是存在很多问题的;
     
     

    ASP.NET MVC 2.0 新特性

    区域(Area

    异步Controller & Action

    强类型inputHelper

    强类型Link Helper

    支持Data Annotations

    改进了缓存方式

    数据标记验证(Data Annotation Validation)

    强类型UI辅助方法和模板化辅助方法(TemplatedHelper)

    其它改进


     

    ASP.NET MVC 3

    建立在ASP.NET MVC 1和2的基础上,新增了更多功能,既简化了你的代码又允许更深的扩展性。经过很长一段时间的测试后,微软日前发布了ASP.NET MVC 3的正式版,其安装步骤与ASP.NET MVC 2完全相同。

    ASP.NET MVC 3主要新增功能:

    • Razor 视图引擎
    • 支持多视图引擎
    • Controller 改进
    • Unobtrusive JavaScript、jQuery Validation和JSON绑定带来更加丰富的JavaScript支持;Model 验证的改进
    • 依赖注入 Dependency Injection 的改进
    • 新的依赖注入(Dependency Injection)和Global Action Filters带来更强大的hooks;

    • 完善后的模型验证(Model Validation)提供了更流畅的验证。

    • 其他新特性

    最后简单总结:

    view接收用户输入,把命令传到controller
    controller处理命令,更新model
    model被更新后,会通知view需要update
    view更新后向用户显示

    mvc3很像 ruby on rails

    另外把每个版本的release note看一下也可以知道具体的区别

    把ASP.NET MVC1.0转为ASP.NET MVC 2.0项目的两种实现方法

    安装了VS2010的人估计都比较头疼那些MVC1.0的项目无法再MVC2.0里面打开。毕竟网上大部分例子还是1.0的。
    转化方法1:
    微软官网推荐的。
    a. 备份你需要转化的项目文件。
    b.使用记事本打开需要转化的工程文件即:.vbproj或者是csproj,然后找到ProjectTypeGuid这个节点,把 {603c0e0b-db56-11dc-be95-000d561079b0}替换为{F85E285D-A4E0-4152-9332-AB1D724D3325}。然后保存文件。
    c.打开这个项目的Web.config文件,查找'System.Web.Mvc,Version=1.0.0.0'并替换它们为'System.Web.Mvc, Version=2.0.0.0'。保存你的配置文件。
    d.使用Visual Studio打开项目,然后在'引用'中倒找System.Web.Mvc,删除掉;以为它是1.0版本,我们删掉后,再把新的2.0版本的System.Web.Mvc添加到引用中来。
    5.打开web.config文件然后在configuration节点部分添加如下部分(也可以不添加,我试过了)
    代码
     <runtime>   

      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">   

        <dependentAssembly>       

      <assemblyIdentity name="System.Web.Mvc"               publicKeyToken="31bf3856ad364e35"/>      

       <bindingRedirect oldVersion="1.0.0.0"   newVersion="2.0.0.0"/>     

      </dependentAssembly>  

       </assemblyBinding>  

    </runtime> 
    然后编译一下就OK了。

    第二个方法是使用一个工具来自动转化: 
    你可以下载这个工具:MvcAppConverter-MVC2RTM.zip (255 KB).


     

     
  • 相关阅读:
    toolblock 编写脚本并运用。
    C#等待子线程执行完毕
    win10+python3.7+dlib+opencv+face_recognition实现人脸识别
    c# tcp/ip通信
    【微信Xposed】kotlin反射异常RuntimeException:looper or serial is null
    安卓APK开启调试
    常用汇编指令对标志位的影响
    简单的.net反调试,调试检测
    虚拟机VMware和win10 hyper-v不兼容的问题
    对某城APP抓包分析--过SSL证书校验
  • 原文地址:https://www.cnblogs.com/softwarelanguagebs/p/2144901.html
Copyright © 2020-2023  润新知