文档
-
ASP.NET MVC 4 ASP.NET MVC 4 是一个框架,用于使用完善的设计模式和 AS...
-
本文档介绍 ASP.NET MVC 4 的发布。
-
指向有关如何使用早期版本的 ASP.NET MVC 的资源的链接。
(包括 2011 年 4 月工具更新)
ASP.NET MVC 3 是一个框架,用于使用完善的设计模式以及 ASP.NET 和.NET Framework的强大功能构建可缩放的、基于标准的 Web 应用程序。
它与 ASP.NET MVC 2 并行安装,请立即开始使用!
在此处下载 安装程序
ASP.NET MVC 3 中的新增功能
安装和帮助
ASP.NET MVC 3 基于 ASP.NET MVC 1 和 2 构建,添加了出色的功能,可简化代码并允许更深入的扩展性。 本主题概述了此版本中包含的许多新功能,分为以下部分:
如果你对框架完全不熟悉,新的基架系统可以更轻松地开始高效使用;如果你经验丰富并且已经知道自己在做什么,则可以自动执行常见开发任务。
这受名为 MvcScaffolding 的新 NuGet 基架包的支持。 术语“基架”被许多软件技术用来表示“快速生成软件的基本大纲,然后你可以编辑和自定义”。 我们为 ASP.NET MVC 创建的基架包在以下几种方案中非常有用:
MvcScaffolding 中的其他功能包括:
ASP.NET MVC 3 工具更新包括对此基架系统的出色 Visual Studio 支持,例如:
有关 ASP.NET MVC 3 中的基架的详细信息,请参阅以下资源:
Steve Sanderson 的帖子系列,包括:
Scott Hanselman 的帖子来自他的 PDC 2010 会话 构建博客与 Microsoft “未命名的 Web 爱包”
“新建项目”对话框包含启用项目模板 HTML 5 版本的复选框。 这些模板利用 Modernizr 1.7 为下层浏览器中的 HTML 5 和 CSS 3 提供兼容性支持。
ASP.NET MVC 3 附带名为 Razor 的新视图引擎,可提供以下优势:
一些新的 Razor 功能包括:
@model
用于指定要传递给视图的类型的语法。@* *@
注释语法。layoutpage
为整个网站) 一次。Html.Raw
在不对文本进行 HTML 编码的情况下显示文本的方法。Razor 还包括新的 HTML 帮助程序,如下所示:
Chart
. 呈现图表,提供与 ASP.NET 4 中的图表控件相同的功能。WebGrid
. 呈现具有分页和排序功能的数据网格。Crypto
. 使用哈希算法创建经过适当加盐和哈希处理的密码。WebImage
. 呈现图像。WebMail
. 发送电子邮件。有关 Razor 的详细信息,请参阅以下资源:
ASP.NET MVC 3 中的 “添加视图 ”对话框允许您选择要使用的视图引擎,使用“ 新建项目 ”对话框可以为项目指定默认视图引擎。 可以选择 (ASPX) 、Razor 或开源视图引擎(如 Spark、NHaml 或 NDjango)的Web Forms视图引擎。
有时需要在操作方法运行之前或操作方法运行之后执行逻辑。 为了支持此功能,ASP.NET MVC 2 提供了操作筛选器。 操作筛选器是自定义属性,提供声明性方法,用于将操作前和操作后行为添加到特定的控制器操作方法。 但是,在某些情况下,你可能希望指定适用于所有操作方法的操作前或操作后行为。 MVC 3 允许通过将全局筛选器添加到集合来 GlobalFilters
指定全局筛选器。 有关全局操作筛选器的详细信息,请参阅以下资源:
MVC 2 控制器支持属性 ViewData
,该属性使你能够使用后期绑定字典 API 将数据传递到视图模板。 在 MVC 3 中,还可以对 属性使用更简单的语法 ViewBag
来实现相同的目的。 例如,可以编写 ,而不是编写 ViewData["Message"]="text"
ViewBag.Message="text"
。 无需定义任何强类型类就可以使用 ViewBag
属性。 由于它是动态属性,因此可以改为获取或设置属性,它会在运行时动态解析它们。 在内部, ViewBag
属性以名称/值对的形式存储在字典中 ViewData
。 (注意:在 MVC 3 的大多数预发行版本中, ViewBag
属性被命名为 ViewModel
property.)
MVC 3 中新增或增强了以下 ActionResult
类型和相应的帮助程序方法:
RedirectPermanent
、 RedirectToRoutePermanent
和 RedirectToActionPermanent
。 这些方法返回 的实例 RedirectResult
, Permanent
并将 属性设置为 true
。默认情况下,MVC 3 中的 Ajax 和验证帮助程序使用不显眼的 JavaScript 方法。 不显眼的 JavaScript 可避免将内联 JavaScript 注入 HTML。 这使得 HTML 更小、更简洁,并更易于交换或自定义 JavaScript 库。 MVC 3 中的验证帮助程序也默认使用 jQueryValidate
插件。 如果需要 MVC 2 行为,可以使用 web.config 文件设置禁用不显眼的 JavaScript。 有关 JavaScript 和 Ajax 改进的详细信息,请参阅以下资源:
在早期版本的 MVC 中,需要从视图中显式调用 Html.EnableClientValidation
方法,以便启用客户端验证。 在 MVC 3 中,不再需要此操作,因为默认情况下启用了客户端验证。 (可以使用web.configfile.)
为了使客户端验证正常工作,仍需要在站点中引用相应的 jQuery 和 jQuery 验证库。 可以在自己的服务器上托管这些库,也可以从内容分发网络 (CDN) (如 Microsoft 或 Google 的 CDN)引用它们。
ASP.NET MVC 3 支持新的 RemoteAttribute 类,该类使你能够利用 jQuery 验证插件的远程验证程序支持。 这使客户端验证库能够自动调用你在服务器上定义的自定义方法,以便执行只能在服务器端完成的验证逻辑。
在以下示例中 Remote
, 属性指定客户端验证将对 类调用名为 UserNameAvailable
UsersController
的操作,以便验证 UserName
字段。
public class User
{
[Remote("UserNameAvailable", "Users")]
public string UserName { get; set; }
}
以下示例显示了相应的控制器。
public class UsersController
{
public bool UserNameAvailable(string username)
{
if(MyRepository.UserNameExists(username))
{
return "false";
}
return "true";
}
}
有关如何使用 Remote
属性的详细信息,请参阅如何:在 MSDN 库中 的 ASP.NET MVC 中实现远程验证 。
ASP.NET MVC 3 包括内置的 JSON 绑定支持,使操作方法能够接收 JSON 编码的数据,并将它绑定到操作方法参数。 此功能在涉及客户端模板和数据绑定的方案中非常有用。 (客户端模板使你能够使用在 client 上执行的模板格式化和显示单个数据项或一组数据项。) MVC 3 使你能够轻松地将客户端模板与发送和接收 JSON 数据的服务器上的操作方法连接起来。 有关 JSON 绑定支持的详细信息,请参阅 Scott Guthrie 的 MVC 3 预览版博客文章的JavaScript 和 AJAX 改进部分。
ASP.NET MVC 3 支持 DataAnnotations
元数据属性,例如 DisplayAttribute
。
ValidationAttribute
.NET Framework 4 中对 类进行了改进,以支持新的IsValid
重载,该重载提供有关当前验证上下文的详细信息,例如正在验证的对象。 这可实现更丰富的方案,你可以在其中基于模型的另一个属性验证当前值。 例如,使用新 CompareAttribute
属性可以比较模型的两个属性的值。 在以下示例中 ComparePassword
, 属性必须与 字段匹配 Password
才能有效。
public class User
{
[Required]
public string Password { get; set; }
[Required, Compare("Password")]
public string ComparePassword { get; set; }
}
IValidatableObject 接口使你能够执行模型级验证,并使你能够提供特定于整个模型状态或模型中两个属性之间的验证错误消息。 MVC 3 现在会在模型绑定时从 IValidatableObject
接口中检索错误,并使用内置的 HTML 表单帮助程序自动标记或突出显示视图中受影响的字段。
IClientValidatable 接口使 ASP.NET MVC 能够在运行时发现验证程序是否支持客户端验证。 此接口经过设计,以便可以与各种验证框架集成。
有关验证接口的详细信息,请参阅 Scott Guthrie 的 MVC 3 预览版博客文章的模型验证改进部分。 但是, (请注意,博客中对“IValidateObject”的引用应为“IValidatableObject”.)
ASP.NET MVC 3 为应用依赖项注入 (DI) 以及与依赖项注入或控制反转集成提供了更好的支持, (IOC) 容器。 在以下几个方面添加了对 DI 的支持:
MVC 3 支持 Common Service Locator 库和支持该库接口 IServiceLocator
的任何 DI 容器。 它还支持新的 IDependencyResolver
接口,以便更轻松地集成 DI 框架。
有关 MVC 3 中的 DI 的详细信息,请参阅以下资源:
ASP.NET MVC 3 会在安装过程中自动安装和启用 NuGet。 NuGet 是一个免费的开源包管理器,可用于在项目中轻松查找、安装和使用 .NET 库和工具。 它适用于所有 Visual Studio 项目类型, (包括 ASP.NET Web Forms 和 ASP.NET MVC) 。
NuGet 使维护开放源代码项目的开发人员 (例如 Moq、NHibernate、Ninject、StructureMap、NUnit、温莎、RhinoMocks 和 Elmah) 来打包其库并将其注册到联机库中。 然后,对于想要使用这些库之一来查找包并将其安装在他们正在处理的项目中的 .NET 开发人员来说,就很容易了。
通过 ASP.NET 3 工具更新,项目模板包括 JavaScript 库预安装的 NuGet 包,因此可通过 NuGet 进行更新。 Entity Framework Code First 也预装为 NuGet 包。
有关 NuGet 的详细信息,请参阅 NuGet 文档。
ASP.NET 自版本 1 起,MVC 一直支持整页响应的输出缓存。 MVC 3 还支持部分页输出缓存,使你能够轻松缓存响应的区域或片段。 有关缓存的详细信息,请参阅 Scott Guthrie 关于 MVC 3 候选版本的博客文章的部分页面输出缓存部分和 MVC 3 发行说明的子操作输出缓存部分。
ASP.NET MVC 具有内置的请求验证,可自动帮助防止 XSS 和 HTML 注入攻击。 但是,有时你想要显式禁用请求验证,例如,如果想要让用户发布 HTML 内容 (例如,在博客条目或 CMS 内容) 。 现在可以向模型或视图模型添加 AllowHtml 属性,以便在模型绑定期间基于每个属性禁用请求验证。 有关请求验证的详细信息,请参阅以下资源:
在 ASP.NET MVC 3 中,可以将项目模板、视图引擎和单元测试项目框架添加到“ 新建项目 ”对话框。
与早期版本的 MVC 相比,ASP.NET MVC 3 基架模板在识别模型上的主键属性并对其进行适当处理方面做得更好。 (例如,基架模板现在确保主键不会作为可编辑的表单字段进行基架。)
默认情况下,创建和编辑基架现在使用 Html.EditorFor
帮助程序而不是 Html.TextBoxFor
帮助程序。 当 “添加视图 ”对话框生成视图时,这改进了对数据注释属性形式的模型元数据的支持。
为 LabelFor
和 LabelForModel
帮助程序方法添加了新的方法重载。 通过新的重载,可以指定或替代标签文本。
在 ASP.NET MVC 3 中,可以指示是否希望控制器类使用会话状态,如果是,则会话状态应为读/写还是只读。 有关无会话控制器支持的详细信息,请参阅 MVC 3 发行说明。
可以使用 AdditionalMetadata 属性填充模型属性的 ModelMetadata.AdditionalValues
字典。 例如,如果视图模型具有应仅向管理员显示的属性,则可以批注该属性,如以下示例所示:
public class ProductViewModel
{
[AdditionalMetadata("AdminOnly", true)]
public string RefundCode {get; set;}
}
呈现产品视图模型时,此元数据可供任何显示或编辑器模板使用。 由你来解释元数据信息。
Internet 项目模板中的 AccountController 已得到很大的改进。
包含新的 Intranet 项目模板,用于启用 Windows 身份验证并删除 AccountController。
文档
ASP.NET MVC 4 ASP.NET MVC 4 是一个框架,用于使用完善的设计模式和 AS...
本文档介绍 ASP.NET MVC 4 的发布。
指向有关如何使用早期版本的 ASP.NET MVC 的资源的链接。
培训
学习路径
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization