ASP.NET MVC 5.1 的新增功能

Microsoft

本主题介绍 ASP.NET Web MVC 5.1 的新增功能。

软件要求

下载

运行时功能作为 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 类进行扩展。

视图中的枚举支持

  1. 新的 @Html.EnumDropDownListFor() 帮助程序方法。 应像大多数 HTML 帮助程序一样使用它们,并注意表达式的计算结果必须为 枚举 类型或 可为 Null 的<T> ,其中 T枚举 类型。 使用 EnumHelper.IsValidForEnumHelper() 检查这些要求。
  2. 返回 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