问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样区分webform和mvc

发布网友 发布时间:2022-05-06 19:03

我来回答

1个回答

热心网友 时间:2023-10-02 01:54

MVC与WebForm最大的区别

使用ASP.NET MVC框架,创建默认项目,第一直观感觉就是地址都是Rewrite过的。对源码和配置文件稍加分析不难看出,MVC使用了httpMoles来拦截地址请求,具体用到了System.Web.Routing类库(MVC2中,MVC1怎么用的忘记了。)而这部分类库被包装在.NET Framework3.5 SP1中,MVC2需要SP1支持也就理所当然了。SP1提供的System.Web.Routing类库可以方便地进行地址请求拦截,对编码处理方面也很优秀。UrlRoutingMole类拦截请求,在这之前,Application_Start的时候,会给RouteTable的全局对象一个拦截的设置。而这个设置使用RouteCollection对象进行保存,MVC对这个类进行了扩展——RouteCollectionExtensions。这些可以不考虑,接下来,当用户访问页面时,UrlRoutingMole类拦截请求,在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框架更容易理解,不会产生复杂的配置,也是一个很不错的选择

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桑葚干直接吃还是泡水喝比较好桑葚干直接吃补肾吗 桑葚干泡水吃好还是干吃好 益智仁脑素神经酸片的功效与作用有哪些 黄冈师范学院师范专业有哪些 语文教育专业考研方向分析 黄冈师范学院语文教育专科毕业能拿教师资格证吗 php保留数字小数点后两位的方法 梦见被后咬 梦见母亲给赔鸡钱补了十二元的预兆 梦见门掉下来要二十五元修理费 做梦梦洗澡 泳池底部有绿藻是霉菌吗? 有没有必要学习.NET MVC? mvc和三大框架有什么区别 塑料发霉了洗不掉了怎么办 亚克力游泳池用久了会变色,如何保养才能保证更长久的使用呢? 充气游泳池发霉了还可以用吗?怎么去除霉点? .NET MVC 和JAVA MVC有什么区别 充气式儿童塑料游泳池发霉了..询问清洗方法? 发祝福语没人回复我!无论过年过节哪次都是我主动给别人发!我没什么朋友,能力也很差。难道是人们现实? 用什么可以清洗pvc吹气泳池发黄发霉 给男人发了情人节祝福,他没回复,说明啥? 如果过年发了祝福短信给别人,他没回代表什么? 充气游泳池发霉发黑,用什么洗可以快速洗干净,洗洁精不奏效! 今天过节给别人发个祝福。人家看了会烦吗?都没人理我。 请问重大疾病保险险种有哪些 游泳池地部发霉是怎么回事,怎么处理 单发的祝福,别人不回到底为什么? 过年了,你给别人发祝福短信,别人没回你,你介意吗?为什么? 为了使朋友亲朋关系不生疏,发节日祝福,可是,人都不回一句,有必要在发么?是不是自己计较了? 室内游泳池的湿度很高,建筑表面有些锈蚀和发霉的迹象,哪位高手指点下,跪谢! mvc与三层架构的区别 ASP.NET MVC几个版本的区别 新注册的,不想用如何解除手机号? 穿新鞋脚磨出水泡里的水是什么成分 脚气水泡里的水是什么 脚上水泡里的水是什么水 脚底起的水泡,里面的液体是什么物质? 请问脚被鞋子磨出的水泡里成分是什么?另外水泡是种自我保护吗? 为什么脚上磨起泡了 里面会有水呢 脚底水泡里的水是什么水?能喝吗? 穿新鞋脚磨出水泡里的水是组织液还是淋巴液 粘石头用什么胶最结实 我脚上出的泡泡,白色,弄破之后里面类似于脓水的那种淡白色水。怎么回事呢 脚上长很多水泡很痒,然后把泡弄穿里面很多水,请问这是怎么回事? 脚面 脚趾头上起泡泡 破了里面都是水一样的东西 4399生死狙击城市巷战怎么卡 粘石头用什么胶最好 脚上指甲一周有小水泡,特别痒,破了之后里面有液体渗出,是什么情况? 背景墙上是木头贴石头用什么胶好