среда, 25 июня 2014 г.

Новые возможности ASP.NET MVC 5.1

В начале этого года увидело свет обновление ASP.NET MVC c индексом 5.1. В данной публикации мы пострараемся разобраться какие все таки изменения произошли во фреймворке.

Улучшения аттрибута маршрутизации.


В новой версии аттрибует поддерживает органиченияб возможность версионности и обновленный механизм выборв маршрутизации основанный на заголовках. Многие аспекты аттрибута сейчас можно настривать через интерфейс IDirectRoutFactory и класс RoutFactoryAttribute. Префикс маршрута также можно расширить с использованием интерфейса IRoutePrefix или класса RoutPrefixAttribute.

Поддержка перечислений в представлениях


  1. Новые вспомогательные методы @Html.EnumDropDownListFor(). Предполагается что они  будут использоваться также как и остальные вспомогательные методы, за тем исключением, выражение должно транфорвироваться в тип enum или Nullable<T> где T это enum.
  2. Новый метод EnumHelper.GetSelectList(), который возвращает IList. Это полезно если вам необходимо поизвести некторые действпия со списком прежде чем помещать его на страницу, с помощью скажем @Html.DropDownListFor() или если вы хотите отобразить имена с помощью @Html.EnumDropDowList().
Код представленный ниже демонстрирует возможности новых методов.
@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)) { … }
}
Больше примеров можно найти здесь.

Изменения в шаблона редакторов


Теперь стало возможгным передавать HTML аттрибуты в EditorFor в виде анонимных объектов.
Например:
@Html.EditorFor(model => model, new { htmlAttributes = new { @class = "form-control" }, })

Ненавязчивая валидация для MinLengthAttribute и MaxLengthAttribute


Валидация строк и массивов на стороне клиента сейчас доступна с использование аттрибутов MinLength и MaxLength.

Поддержка контекста ‘this’ в ненавязчивом Ajax


В каллбэк-функциях (OnBegin, OnComplete, OnFailure, OnSuccess), стало возможно обращатся к вызываемому объекту через this. Например:
@Ajax.ActionLink("Click me", "AjaxAction", new AjaxOptions { UpdateTargetId = "foo", OnBegin = "OnClick" })


Известные проблемы и несовместимые изменения


Аттрибут маршрутизации


При нахождении несоответствия в аттрибуте маршрутизации будет сгенерирована ошибка, ранее в подобном случае использовался первый доступный элемент.
Аттрибуту маршрутов запрещено использовать параметр {controller} и параметр {action} для маршрутизации действий. Использование этих параметров с большой долей вероятности приводило к двусмысленности.

Прототипирование MVC/Web API в проект с файлами версии 5.1 использует файлы версии 5.0 которые не присутствуют в проекте.


Обновление с помощью NuGet до версии ASP.NET MVC 5.1 не приводит к автоматическому обновлению средств прототипирования для ASP.NET  или шаблона проектов для ASP.NET Web Application. Они используют предыдущую версию среды исполнения 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, убедитесь что выиспользуте совместимые версии Web API и ASP.NET MVC.

Подсветка синтаксиса для представлений Razor в Visual Studio 2013


Если вы обновитесь до ASP.NET MVC 5.1 RTM без обновления Visual Studio 2013, вы не получите поддержки редактора Visual Studio обновленной подсветки синтаксиса при редакировании представлений Razor. Для этого необходимо обновить Visual Studio 2013.

Переименование Типов


Некоторые типы используемые для аттрибута маршрутизации были переименованы в 5.1. RTM