ASP.NET MVC 5.1 的新增功能
本主题介绍 ASP.NET Web MVC 5.1 的新增功能。
软件要求
- Visual Studio 2012:下载 ASP.NET 和 Web 工具 2013.1 for Visual Studio 2012。
- Visual Studio 2013:下载 Visual Studio 2013 Update 1。 编辑 ASP.NET MVC 5.1 Razor 视图需要此更新。
下载
运行时功能作为 NuGet 库上的 NuGet 包发布。 所有运行时包都遵循 语义版本控制 规范。 最新的 ASP.NET MVC 5.1 RTM 包具有以下版本:“5.1.2”。 可以通过 NuGet 安装或更新这些包。 该版本还包括 NuGet 上的相应本地化包。
可以使用 NuGet 包管理器控制台安装或更新已发布的 NuGet 包:
Install-Package Microsoft.AspNet.Mvc -Version 5.1.2
文档
有关 ASP.NET MVC 5.1 RTM 的教程和其他信息,请参阅 ASP.NET 网站 ( https://www.asp.net) 。
ASP.NET MVC 5.1 中的新增功能
属性路由改进
属性路由现在支持约束,支持基于版本和标头的路由选择。 属性路由的许多方面现在可以通过 IDirectRouteFactory
接口和 RouteFactoryAttribute
类进行自定义。 路由前缀现在可通过 IRoutePrefix
接口和 RoutePrefixAttribute
类进行扩展。
视图中的枚举支持
- 新的
@Html.EnumDropDownListFor()
帮助程序方法。 应像大多数 HTML 帮助程序一样使用它们,并注意表达式的计算结果必须为 枚举 类型或 可为 Null 的<T> ,其中T
是 枚举 类型。 使用EnumHelper.IsValidForEnumHelper()
检查这些要求。 - 返回
IList<SelectListItem>
的新EnumHelper.GetSelectList()
方法。 如果需要在调用(例如 )之前操作选择列表,@Html.DropDownListFor()
或者希望显示显示@Html.EnumDropDownListFor()
的名称,这非常有用。
以下代码演示这些 API。
@if (EnumHelper.IsValidForEnumHelper(ViewData.ModelMetadata))
{
@Html.EnumDropDownListFor(model => model, htmlAttributes: new { @class = "form-control" })
}
@if (EnumHelper.IsValidForEnumHelper(ViewData.ModelMetadata))
{
foreach (SelectListItem item in EnumHelper.GetSelectList(ViewData.ModelMetadata,
(Enum)Model)) { … }
}
可 在此处查看完整示例。
对编辑器模板的启动支持
现在,允许在 EditorFor 中将 HTML 属性作为 匿名对象传入。
例如:
@Html.EditorFor(model => model, new { htmlAttributes = new { @class = "form-control" }, })
MinLengthAttribute 和 MaxLengthAttribute 的不显眼验证
现在,使用 MinLength 和 MaxLength 属性修饰的属性支持对字符串和数组类型的客户端验证。
在 Unobtrusive Ajax 中支持“this”上下文
(OnBegin, OnComplete, OnFailure, OnSuccess
) 的回调函数现在能够通过上下文找到调用元素 this
。 例如:
@Ajax.ActionLink("Click me", "AjaxAction", new AjaxOptions { UpdateTargetId = "foo", OnBegin = "OnClick" })
<script>
function OnClick(jqXHR) {
if ($(this).hasClass("foo")) {
jqXHR.setRequestHeader("custom-header", "value");
}
}
</script>
已知问题和重大更改
属性路由
属性路由匹配中的多义性现在将报告错误,而不是选择第一个匹配项。
属性路由被禁止使用 {controller}
参数,也禁止在操作上放置的路由上使用 {action}
参数。 使用这些参数可能会导致歧义。
将 MVC/Web API 搭建基架到具有 5.1 包的项目会导致项目中尚不存在的包生成 5.0 个包
更新 ASP.NET MVC 5.1 RTM 的 NuGet 包不会更新 Visual Studio 工具,例如 ASP.NET 基架或 ASP.NET Web 应用程序项目模板。 它们使用以前版本的 ASP.NET 运行时包 (5.0.0.0) 。 因此,ASP.NET 基架将安装以前版本 (5.0.0.0) 所需包(如果它们在项目中尚不可用)。 但是,Visual Studio 2013 RTM 或 Update 1 中的 ASP.NET 基架不会覆盖项目中的最新包。 如果在将项目的包更新到 Web API 2.1 或 ASP.NET MVC 5.1 后使用 ASP.NET 基架,请确保 Web API 和 ASP.NET MVC 的版本一致。
Visual Studio 2013 中 Razor 视图的语法突出显示
如果更新到 ASP.NET MVC 5.1 RTM 而不更新Visual Studio 2013,则在编辑 Razor 视图时,将不会获得 Visual Studio 编辑器对语法突出显示的支持。 需要更新Visual Studio 2013才能获得此支持。
类型重命名
用于属性路由扩展性的一些类型在 5.1 RTM 中重命名。
旧类型名称 (5.1 RC) | 新类型名称 (5.1 RTM) |
---|---|
IDirectRouteProvider | IDirectRouteFactory |
RouteProviderAttribute | RouteFactoryAttribute |
DirectRouteProviderContext | DirectRouteFactoryContext |