mvc1,mvc2,mvc3都有什么区别
mvc1 模式:

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

  mvc2 模式:

由于mvc1中,model可以通知view,然后view就可以被更新,这在windows程序中很常见,像MFCframe-document-view架构,如果document改变了,他会主动通知view进行update

但是在web中,作为modeljava bean更新后,无法调用作为viewjsp(而且view通常很多,
需要选一个),因此改为mvc2模式:

view接收用户输入,把命令传到controller
controller处理命令,更新model
model被更新后,controller会选一个viewforward到这个jsp,附带把model放到request参数
这个view获得model然后显
ASP.NET MVC 3 新特性全解
ASP.NET MVC3 ASP.NET MVC 1 2 的基础上,增加了大量的特性,使得代码更加简化,并且可以深度扩展。这篇文章提供包含在此次发布中的许多新特性的说明.
Razor 视图引擎
ASP.NET MVC3 带来了一种新的名为 Razor 的视图引擎,提供了下列优点
Razor 现在提供了一些新的特征
Razor 还包含新的 HTML Helper,例如
支持多视图引擎
ASP.NET MVC3 中,增加视图的对话框中允许你选择你希望的视图引擎,在新建项目对话框中,你可以指定项目默认的视图引擎,可以选择 WebFormRazor,或者开源的视图引擎,例如:Spark, NHaml, 或者 NDjango.
控制器的改进
全局的 Action 过滤器
有的时候你希望能够在在一个 Action 方法执行之前或者执行之后执行一些处理逻辑,在 ASP.NET MVC2 中,提供了 Action 过滤器,允许对特定控制器的 Action 方法进行处理,实际上,有时候你希望对所有的 Action 都进行类似的处理,MVC3 允许你将过滤器加入到 GlobalFilters 集合中来创建全局的过滤器.
新的 ViewBag 属性
MVC2 中的控制器支持 ViewData 属性,允许通过后绑定的字典将数据传送给视图模板,在 MVC3 中,你可以通过 ViewBag 来更加简单的完成。例如,对于 ViewData["Message"] = "t
ext",你可以通过 ViewBag.Message = "text" 来完成。你不需要通过类来定义任何强类型的属性,因为这是动态属性,在内部,ViewBag 属性以名-值对的形式保存在 ViewData 字典中。注意,在许多预发布版本中,这个属性被称为 ViewModel
新的 ActionResult 类型
下面的 ActionResult 类型在 MVC3 中是新增的或者被扩展的
JavaScript Ajax 改进
默认情况下,在 MVC3 中,Ajax 和验证使用不引人注目的 unobtrusive JavaScript 方式。unobtrusive 不会在 HTML 中插入行内的 JavaScript ,这使得 HTML 更加精简和更少干扰,也使得更加容易被替换和定制 JavaScript 库,在 MVC3 中,验证助手默认使用 jQuery.Validate 插件完成,如果你希望使用 MVC2 的行为,你可以在 fig 中通过配置来关闭 unobtrusive .
默认启用了客户端验证
在早先版本的 MVC 中,你需要在视图中显式调用 Html.EnableClientValidation 方法来启用客户端验证。在 MVC3 中,已经不再需要了,因为默认就会启用客户端验证。可以在 web.c
onfig 中关闭
为了使得客户端验证工作,你仍然需要在网站中加入对 jQuery jQuery.Validation 库的引用,你可以在自己的网站中提供,或者使用 Microsoft 或者 Google CDN 服务器
远程验证
ASP.NET 3 通过一个新的标签 RemoteAttribute jQuery Validation 插件的远程验证提供支持。这允许客户端的验证库自动调用一个你定义在服务器上的自定义的方法来完成只能在服务器上完成的验证逻辑
在下面的例子中,Remote 标签指定了通过一个定义在 UsersController 中名为 UserNameAvailable 的方法来验证用户名字段
o Razor 的语法简单且清晰,只需要最小化的输入
o Razor 容易学习,语法类似于 C# VB
o Visual Studio 对于 Razor 提供了智能提示和语法着
o Razor 视图不需要允许程序或者启动 Web 服务器就可以进行测试
o @model 用来指定传到视图的 Model 类型
o @* * 注释语法
o 对于整个站点可以一次性设定默认项目,例如布局。
o Html.Raw 方法提供了没有进行 HTML 编码的输出
o 支持在多个视图之间共享代码 ( _viewstart.cshtml 或者 _viewstart.vbhtml )
o Chart. 生成图表
o WebGrid, 生成数据表格,支持完整的分页和排序
o Crypto,使用 Hash 算法来创建 Hash 和加盐的口令
o WebImage, 生成图片
o WebMail, 发送
o HttpNotFoundResult. 向客户端返回 404 HTTP 状态.
o RedirectResult. 基于一个布尔型的参数,返回一个临时的重定向 (HTTP 302 status code) 或者持久的重定向 (HTTP 301 status code), 结合这个改进,, Controller 提供了三个方法来支持持久的重定向: RedirectPermanent, RedirectToRoutePermanent, RedirectToActionPermanent. 这些方法返回一个 Permanent 属性为真的 RedirectResult 对象实例。
o HttpStatusCodeResult. 返回用户指定的 HTTP 状态码。
1. public class User   
2. {   
3. [Remote("UserNameAvailable""Users")]   
4. public string UserName { getset; }   
5. }   
下面的代码定义在控制器
1. public class UsersController   
2. {   
3. public bool UserNameAvailable(string username)   
4. {   
5. if(MyRepository.UserNameExists(username))   
6. {   
7. return "false";   
8. }   
9. return "true";   
10. }   
11. }   
关于 Remote 属性的更多资源,参考 How to: Implement Remote Validation in ASP.NET MVC msdn.microsoft/en-us/library/gg508808(VS.98).aspx
JSON 绑定支持
ASP.NET MVC3 包含内置的 JSON 绑定支持,允许 Action 方法接收 JSON 编码的数据并且模型化为 Action 的参数。这个能力经常被用于客户端的模板和数据绑定中。客户端模板允许你通过客户端的模板来格式化和显示一个或者多个数据,MVC3 允许你简单的连接客户端模板和服务器端的 Action 方法,通过 JSON 来发送和接收数据,更多的信息参考:Scott Guthrie's MVC 3 Preview blog post.
ValidationAttribute
.NET Framework4 中被改进 ValidationAttribute 类支持新的 IsValid 重载,提供关于当前验证上下文的更多信息,例如什么对象被验证了。这允许你基于 Model 的其他属性来验证
当前值,例如,新的 CompareAttribute 就允许你比较 Model 的两个属性的值,在下面的例子中,ComparePassword 属性必须匹配 Password 字段来同通过验证
Model 验证的改进
DataAnnotations 元数据标签
ASP.NET MVC3 支持 DataAnnotations 元数据标签,例如:DisplayAttribute
1. public class User   
2. {   
3. [Required]   
4. public string Password { getset; }   
5. [Required, Compare("Password")]   
6. public string ComparePassword { getset; }   
7. }   
验证接
IValidatableObject 接口允许执行 Model 水平的验证,并且允许你提供整个模型状态的验证错误信息,或者基于 Model 的两个属性。当 Model 绑定的时候,MVC3 IValidatableObject 接收错误信息,在视图中使用内建的 HTML 助手时,将会自动标识或者高亮受影响的字段
IClientValidatable 接口允许 ASP.NET MVC 在运行时发现支持的客户端验证器,这个接口被用来支持集成不同的验证框架
更加关于验证接口的内容,参考 Scott Guthrie's MVC 3 Preview blog post Model Validation Improvements 一节
依赖注入Dependency Injection 的改进
ASP.NET MVC3 提供了更好的 DI IoC 支持,在下面的地方支持 DI:
MVC3 支持 Common Service Locator 库和任何支持这个库的 IServiceLocator 接口的 DI 容器。也支持新的容易集成到 DI 框架的 IDependencyResolver 接口
更多关于 DI 的信息,参考
其他新特
NuGet 集成
ASP.NET MVC3 自动安装和启用 NuGet NUGet 是免费开源的一个包管理器,使得在你的项目中容易发现,安装,和使用 .NET 库。它可以和所有的 Visual Studio 项目类型一起工作,包括 ASP.NET WebForm MVC

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。