MVC学习五:MVC 3.0 的新特性

我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性

摘要

MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟。使开发也变得简洁人性化艺术化。

园子里有很多大鸟都对MVC了如指掌,面对问题犹同孙悟空的七十二变一般游刃有余,令人羡慕。大鸟们的著作我们作为菜鸟看了又看,读了又读但是还是对MVC3.0的了解不是很深。

这种杯具的情况岂止是杯具呀,那简直就是杯具。综合分析后得出结论:眼高手低!!!

最后菜鸟痛定思过,决定从最基本的开始一步一步开始学习MVC 3.0 也希望想学习MVC3.0的小菜们分享一下下。。。。

前言

ASP.NET MVC3 在 ASP.NET MVC 1 和 2 的基础上,增加了大量的特性,使得代码更加简化,并且可以深度扩展。这篇文章提供包含在此次发布中的许多新特性的说明,分为以下部分:

  • Razor 视图引擎
  • 支持多视图引擎
  • Controller 改进
  • JavaScript 和 Ajax
  • Model 验证的改进
  • 依赖注入 Dependency Injection 的改进
  • 其他新特性

 

Razor 视图引擎

ASP.NET MVC3 带来了一种新的名为 Razor 的视图引擎,提供了下列优点:

  • Razor 的语法简单且清晰,只需要最小化的输入
  • Razor 容易学习,语法类似于 C# 和 VB
  • Visual Studio 对于 Razor 提供了智能提示和语法着色
  • Razor 视图不需要允许程序或者启动 Web 服务器就可以进行测试

Razor 现在提供了一些新的特征:

  • @model 用来指定传到视图的 Model 类型
  • @*  * 注释语法
  • 对于整个站点可以一次性设定默认项目,例如布局。
  • Html.Raw 方法提供了没有进行 HTML 编码的输出
  • 支持在多个视图之间共享代码 ( _viewstart.cshtml 或者 _viewstart.vbhtml )

Razor 还包含新的  HTML Helper,例如:

  • Chart. 生成图表
  • WebGrid, 生成数据表格,支持完整的分页和排序
  • Crypto,使用 Hash 算法来创建 Hash 和加盐的口令
  • WebImage, 生成图片
  • WebMail, 发送电子邮件

如下示例代码:

复制代码
@model List<MvcMusicStore.Models.Album>
@{
    ViewBag.Title = "ASP.NET MVC Music Store";
}
<div id="promotion">
</div>

<h3><em>Fresh</em> off the grill</h3>

<ul id="album-list">
    @foreach (var album in Model)
    {
        <li><a href="@Url.Action("Details", "Store",
                new { id = album.AlbumId })">

            <img alt="@album.Title" src="@album.AlbumArtUrl" />
            <span>@album.Title</span> </a>
        </li>
    }
</ul>
复制代码

关于 Razor 更多的资料,可以参考下面的资源:

  • Scott Guthrie's blog post introducing Razor
  • Scott Guthrie's blog post introducing the @model keyword
  • Scott Guthrie's blog post introducing Razor layouts
  • Razor API Quick Reference
  • MVC 3 Release Notes

支持多视图引擎

 在 ASP.NET MVC3 中,增加视图的对话框中允许你选择你希望的视图引擎,在新建项目对话框中,你可以指定项目默认的视图引擎,可以选择 WebForm,Razor,或者开源的视图引擎,例如:Spark, NHaml, 或者 NDjango.

选择视图引擎:

 

 

控制器的改进

 全局的 Action 过滤器

有的时候你希望能够在在一个 Action 方法执行之前或者执行之后执行一些处理逻辑,在 ASP.NET MVC2 中,提供了 Action 过滤器,允许对特定控制器的 Action 方法进行处理,实际上,有时候你希望对所有的 Action 都进行类似的处理,MVC3 允许你将过滤器加入到 GlobalFilters 集合中来创建全局的过滤器,详细的介绍,参考下列资源:

  • Scott Guthrie's blog on the MVC 3 Preview
  • Filtering in ASP.NET MVC

新的 ViewBag 属性

MVC2 中的控制器支持 ViewData 属性,允许通过后绑定的字典将数据传送给视图模板,在 MVC3 中,你可以通过 ViewBag 来更加简单的完成。例如,对于 ViewData["Message"] = "text",你可以通过 ViewBag.Message = "text" 来完成。你不需要通过类来定义任何强类型的属性,因为这是动态属性,在内部,ViewBag 属性以名-值对的形式保存在 ViewData 字典中。注意,在许多预发布版本中,这个属性被称为 ViewModel。

新的 ActionResult 类型

下面的 ActionResult 类型在 MVC3 中是新增的或者被扩展的。

  • . 向客户端返回 404 HTTP 状态. HttpNotFoundResult
  • . 基于一个布尔型的参数,返回一个临时的重定向 (HTTP 302 status code) 或者持久的重定向 (HTTP 301 status code),  结合这个改进,,  提供了三个方法来支持持久的重定向: , , 和 . 这些方法返回一个   属性为真的 对象实例。 RedirectResultControllerRedirectPermanentRedirectToRoutePermanentRedirectToActionPermanentPermanentRedirectResult
  • . 返回用户指定的 HTTP 状态码。 HttpStatusCodeResult

JavaScript 和 Ajax 改进

 默认情况下,在 MVC3 中,Ajax 和验证使用不引人注目的 unobtrusive  的 JavaScript 方式。unobtrusive  不会在 HTML 中插入行内的 JavaScript ,这使得 HTML 更加精简和更少干扰,也使得更加容易被替换和定制 JavaScript 库,在 MVC3 中,验证助手默认使用 jQuery.Validate 插件完成,如果你希望使用 MVC2 的行为,你可以在 web.config 中通过配置来关闭 unobtrusive ,更多的信息参考下列资源:

  • Basic introduction to unobtrusive JavaScript on the Wikipedia site
  • Brad Wilson's Unobtrusive JavaScript Post
  • Brad Wilson's Unobtrusive JavaScript Validation Post
  • (tutorial on the ASP.NET site) Creating a MVC 3 Application with Razor and Unobtrusive JavaScript
  • MVC 3 Release Notes

默认启用了客户端验证

 在早先版本的 MVC 中,你需要在视图中显式调用 Html.EnableClientValidation 方法来启用客户端验证。在 MVC3 中,已经不再需要了,因为默认就会启用客户端验证。可以在 web.config 中关闭。

为了使得客户端验证工作,你仍然需要在网站中加入对 jQuery 和 jQuery.Validation 库的引用,你可以在自己的网站中提供,或者使用 Microsoft 或者 Google 的 CDN 服务器。

远程验证

ASP.NET 3 通过一个新的标签 RemoteAttribute 对 jQuery Validation 插件的远程验证提供支持。这允许客户端的验证库自动调用一个你定义在服务器上的自定义的方法来完成只能在服务器上完成的验证逻辑。

在下面的例子中,Remote 标签指定了通过一个定义在 UsersController 中名为 UserNameAvailable 的方法来验证用户名字段。

你可能感兴趣的:(MVC学习五:MVC 3.0 的新特性)