当我第一次听说StackOverflow,并听说它是在ASP.Net MVC中构建时,我有点困惑.我认为ASP.Net始终是MVC架构的一个例子.您有提供视图的.aspx页面,提供控制器的.aspx.vb页面,您可以创建另一个类作为模型.在这篇Microsoft文章中描述了在ASP.Net中使用MVC的过程.
所以我的问题是.ASP.Net MVC提供了什么,你不能用常规的ASP.Net(甚至早在ASP.Net 1.1)?它只是花哨的URL?是否只是为了吹嘘MS能够将自己与Ruby On Rails等新技术进行比较,并说"我们也可以这样做"?是否还有ASP.Net MVC实际提供的内容,而不是文件 - >新菜单中的一些额外模板?
我现在可能听起来非常怀疑和消极,所以我会停下来.但我真的想知道ASP.Net MVC实际提供了什么.此外,如果任何人可以告诉我为什么它是模型 - 视图 - 控制器而不是视图 - 控制器 - 模型或模型 - 控制 - 视图层的顺序,这取决于你是从上到下,反之亦然,我会真的很感激.
编辑
此外,值得指出的是,我从未真正关心网络表单(AKA服务器控件)模型.我只是最低限度地使用它,而且从不在工作中.
.aspx不符合MVC模式,因为在后面的代码('controller')之前调用了aspx页面('view').
这意味着控制器对视图具有"硬依赖性",这与MVC原则非常相似.
MVC的核心优势之一是它允许您在不实例化真实视图的情况下测试控制器(包含大量逻辑).你根本无法在.aspx世界中这样做.
单独测试控制器要比实例化整个asp.net管道(应用程序,请求,响应,视图状态,会话状态等)快得多.
Scott Guthrie在这篇文章中解释了它" ASP.NET MVC框架 "
它可以在默认情况下实现关注点,可测试性和TDD的清晰分离.MVC框架内的所有核心契约都是基于接口的,并且易于模拟(它包括基于接口的IHttpRequest/IHttpResponse内在函数).您可以对应用程序进行单元测试,而无需在ASP.NET进程中运行控制器(快速进行单元测试).您可以使用任何您想要进行此测试的单元测试框架(包括NUnit,MBUnit,MS Test等).
它具有高度可扩展性和可插拔性.MVC框架中的所有内容都经过精心设计,以便可以轻松替换/自定义(例如:您可以选择插入自己的视图引擎,路由策略,参数序列化等).它还支持使用现有的依赖注入和IOC容器模型(Windsor,Spring.Net,NHibernate等).
它包含一个非常强大的URL映射组件,使您可以使用干净的URL构建应用程序.URL不需要在其中包含扩展,并且旨在轻松支持SEO和REST友好的命名模式.例如,我可以轻松地将/ products/edit/4 URL映射到上面项目中ProductsController类的"编辑"操作,或者将/ Blogs/scottgu/10-10-2007/SomeTopic/URL映射到" DisplayPost"BlogEngineController类的动作.
MVC框架支持使用现有的ASP.NET .ASPX,.ASCX和.Master标记文件作为"视图模板"(意味着您可以轻松使用现有的ASP.NET功能,如嵌套母版页,<%=%>代码段,声明性服务器控件,模板,数据绑定,本地化等).但是,它不会将现有的回发后模型用于返回服务器的交互.相反,您将所有最终用户交互路由到Controller类 - 这有助于确保关注点和可测试性的清晰分离(这也意味着没有基于MVC的视图的视图状态或页面生命周期).
ASP.NET MVC框架完全支持现有的ASP.NET功能,如表单/窗口身份验证,URL授权,成员资格/角色,输出和数据缓存,会话/配置文件状态管理,运行状况监视,配置系统,提供程序体系结构等.