Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/1/30 0:52:41
ASP.NET,MVC,框架_[Asp.Net教程]

ASP.NET MVC 框架_[Asp.Net教程]

【原文地址】ASP.NET MVC Framework
【原文发表日期】 Sunday, October 14, 2007 10:41 PM


过去的几年里,很多人要求ASP.NET的一件事情就是对使用基于model-view-controller(模型-视图-控制器,简称MVC)架构来开发web应用的内置支持。


上个周末在Austin举行的Alt.NET大会上,我首次对我的团队正在开发的新ASP.NET MVC 框架作了一个公开的演示。你可以在Scott Hanselman这里的博客上观看我的讲座的录像。


我们将在今年稍后发布该框架的一个公开预览版,然后在明年的上半年将它作为完全支持的ASP.NET特性推出。


模型-视图-控制器(MVC)框架是什么东西?


MVC是个将一个应用的实现分成三个组件角色的框架技术:模型,视图和控制器。





使用MVC方法的一个好处是,它有助于促进应用中模型,视图,控制器间的关注的清晰分离。保持关注的清晰分离使得对应用的测试极其容易,因为不同应用组件间的契约的定义和表达是更明确的。


MVC模式也有利于促进红/绿式测试驱动的开发 (TDD),通过它,你可以在你实际编写应用代码本身之前首先实现自动化的单元测试,这些单元测试定义和核实了新代码的需求。


ASP.NET MVC 框架的一些简要细节


在几个星期后,相关代码可以下载之后,我将写一些关于这个新的ASP.NET MVC 框架的深入性的教程贴子(与此同时,想进一步了解它的最佳方式是观看我的Alt.net讲座的录像):


这里是关于ASP.NET MVC 框架的一些简要细节:







结语


如果你正在想使用MVC方式建造你的web应用的话,我认为你会发现这个新的 ASP.NET MVC 框架选项非常干净,而且容易使用。它将允许你在你的应用中很轻易地保持关注分离,而且有助于进行干净的测试和TDD。


几个星期之后,我将撰文说明新的MVC特性的工作原理,以及如何利用它们。


希望本文对你有所帮助,


Scott




【附】 Scott Guthrie对一些评语的答复:


1. 【问】你可以在现有的ASPX,ASCX等。。。里使用声明式服务控件,假如服务控件需要ViewState和Page的生命周期才能工作的话,那么在基于MVC的视图里使用服务器控件的后果是?


【答】视图本身是标准的.aspx, .ascx, .master文件,所以还是有对应的后台(code-behind)类,你可以在其中处理控件的render事件,以把视图的markup与视图的显示逻辑干净地分开。


至于声明式控件,控件模型对建造控件而言还是一样的,区别是,你不能使用postback特性。从逻辑上说,这就象今天创建一个没有的aspx网页类似。所以象以及其他的控件依旧还会工作,你要使用标准的表单提交或 url来做post操作。


我们也会提供一些对MVC有意识的服务器控件,可以用于没有postback的视图页面里,它们将与基于控制器的逻辑很干净地集成。


2. 【问】MVC框架是否会包括在VS 2008 RTM里?

【答】 MVC框架可以在VS 2008 RTM下工作,我们将在发布VS 2008 RTM的同时,发布第一个预览版。MVC框架本身先会居于一个单独的程序集中,然后会变成.NET 3.5 SP1的一部分。


3. 【问】假如我们使用MVC框架,我们是不是又回到原地了?还是会提供给我们这些认为生命是短暂的人一些适当的好处?用个比喻,我可不想每次冲淋浴,就要重建水龙头(taps)。


【答】注意,MVC框架并不替代现有的web form模型,很明显,我们将继续完全支持并增强web form模型的功能。所有,假如你喜欢控件postback式交互的话,我大概会建议你还是继续目前的做法,使用基于MVP的模型来做测试。


而MVC模型的确在显示HTML方面给你更多的控制。但就象你注意到的,这既有好处也有坏处,好处是你有更多的控制,坏处是,控制越多,你需要照顾的东西也越多。我们将提供很好的方式来处理错误和保持表单状态,这样你就不用写些丑陋的编码来处理这些东西了。对你的界面来说,服务器控件模型还是很好地提供了非常干净的方式来封装视图辅助(view-helper)功能,而且我们将提供一套丰富的控件来辅助你。


4. 【问】Brail视图引擎有一样好处是,视图是独立于主要应用被编译的,所以假如你对视图做了改动,它可以立刻被重新编译。我假定基于DLR的视图没有被编译,但在aspx视图的情形下,改动视图是否需要重新装载应用而导致长时间的延缓呢?假如不需要的话就太好了。


【答】当.aspx网页被改动后, ASP.NET监测到其变化后,会自动为它生成一个新的程序集。那样,我们就不需要重新启动应用了。在基于DLR的.aspx网页的情形下,实际上我们根本不创建程序集,而可以在内存里对它们做编译,基于IronPython的.aspx 网页就是这样工作的。


注意,因为ASP.NET MVC框架是可以插拔的,你可以选用MonoRail Brail视图引擎来显示你的视图。所以如果你喜欢Brail模型的话,还是可以继续和新的MVC框架协同工作的。


5.【问】对MVC有意识的服务器控件能否可以从模型验证来推出自动的客户端验证(譬如通过CSS属性)?


【答】我们会研究,在可能的情况下,从模型的验证,来允许处理错误的客户端样式和客户端JavaScript错误验证。但这个不会出现在几个星期后的第一个预览版里,但这是我们近期看过的,以后会再研究。


6.【问】你是可以讨论一下MVC中DLR,动态语言,LINQ和Asp.Net futures的支持?


【答】LINQ肯定会在MVC框架内完全支持,我们也会增加DLR支持,允许你使用包括IronPython和IronRuby在内的动态语言建造视图和控制器。


7.【问】象UpdatePanel和其他依赖于postback模型的跟AJAX有关的特性将会得到什么样的支持?

【答】UpdatePanel确实使用postback,所以你无法直接在基于MVC的视图里使用那个控件。但我们将提供一个跟该控件类似功能的控件以及相关的辅助方法。它会调用控制器的一个方法,允许你非常容易地做局部更新。它将允许你非常轻松地使用ASP.NET AJAX库。在几个星期之后我会写博客讨论更多细节。


8.【问】你的讲座录像里的视图代码看上去非常危险地象是老的asp(没有.net)。monorail nvelocity也是如此。我希望你能综合两者的好处哦。


【答】有些人喜欢<%= %>模型,在alt.net大会上我演示MVC模型讲座的参与者都要我使用这种方法(所以我写了那样的代码),我也可以使用来做列表,通过code-behind来做数据绑定,这允许你更清晰地构造你的视图显示代码。


9.【问】我只是好奇,你需要对内层代码做多少改动才能使得声明式服务器控件在不使用postback模型的情形下工作?ASP.NET MVC会在没有的页面上支持现有的服务器控件么?我们是否能够在同一个页面上使用多个HTML表单?


【答】我们实际上不用改动内层代码来支持MVC框架,ASP.NET 实际上已经包含大部分所需的hook了。

ASP.NET MVC框架将允许你在同一个页面里使用多个HTML表单。象和其他支持只读模式的控件完全没问题,但倚重于Postback的控件是无法支持postback操作的。


10.【问】我注意到你在ALT.NET的演示里,你从控制器里往视图里以 new {"value", "value2"}的形式传递匿名类型。我的印象是,匿名类型是无法传到一个方法的范围之外的。你能解释一下么?


【答】匿名类型是可以传到他们所在范围之外的,但类型名称是未知的(譬如,你可以以Object类型的形式传递或返回这些对象)。


我使用的辅助方法接受一个object作为可选的参数类型,然后使用IDictionary或反射获取其中的名称/数组对。所以我可以写

<%= Html.Link("Push Me", new { Action="Edit", ID=p.ProductId }); %>


来源:scottgu的blog






If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759