После недавнего выхода релиз-кандидата ASP.NET MVC 2 можно говорить, что никакие API до релиза уже не изменятся. А значит можно задумываться о применении новой версии в реальных проектах. В этом вопросе хотелось собрать информацию об отличиях версии 2 от предыдущего релиза.
Нововведения в ASP.NET MVC 2
Популярные ответы
Строго типизированные HTML-хелперы. Кроме того, они теперь возвращают не String, а MvcHtmlString.
Updated:
Вот список:
- DisplayFor()
- DisplayTextFor()
- EditorFor()
- CheckBoxFor()
- HiddenFor()
- PasswordFor()
- RadioButtonFor()
- TextBoxFor()
- LabelFor()
- DropDownListFor()
- ListBoxFor()
- TemplateFor()
- TextAreaFor()
- ValidationMessageFor()
Как видно, все хелперы заканчиваются суффиксом For (хотя это и не является обязательным условием). Все они принимают в качестве аргумента объект типа Expression<Func<TModel, TValue>>
. Т.е. лямбда-выражение, где TModel обычно представляет тип, которым строго типизирован View. Кроме того, некоторые хелперы принимают еще аргументы, специфичные для конкретного элемента (например IEnumerable<SelectListItem>
для DropDownListFor()
)
Использование довольно просто:
Есть класс:
public class RegisterModel
{
[DisplayName("User name")]
public string UserName { get; set; }
[DisplayName("Email address")]
public string Email { get; set; }
[DisplayName("Password")]
public string Password { get; set; }
[DisplayName("Confirm password")]
public string ConfirmPassword { get; set; }
}
Далее в строго типизированном этим классом виде пишем:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.RegisterModel>" %>
...
<%= Html.LabelFor(m => m.UserName) %>
<%= Html.TextBoxFor(m => m.UserName) %>
<%= Html.ValidationMessageFor(m => m.UserName) %>
Пример взят из создаваемого по-умолчанию проекта ASP.NET MVC 2 (с некоторыми упрощениями)
Вот ряд изменений, которые есть в ASP.NET MVC 2 RC :
- скрипты валидации перемещны в отдельный файл;
- скрипты валидации теперь можно включать как сначала разметки, так и внизу для клиентской оптимизации;
- скрипты валидации поддерживают глобализацию;
- метод Html.ValidationSummary может теперь отображать не сразу все ошибки валидации, а только те, которые вычисляются в модели, чтобы остальные показывались рядом с элементами управления и не дублировались;
- шаблоны T4 в Visual Studio теперь генерируют код специфичный для версии .NET Framework
- разметка генерируемая через Add View теперь содержит использование Editor, EditorFor, Display и DisplayFor;
- теперь можно декларативно задать поведение кнопки и ее влияние на валидацию формы, вызывает валидацию или нет;
- теперь можно декларативно управлять тем, когда вызывается валидация: во время ввода, после смены фокуса, перед отправкой формы;
- был исключен метод Html.Substitute;
- инсталятор теперь не производит маппинг скриптов для IIS6 и IIS7 в режиме Integrated Mode, при нужде инструменты для самостоятельного маппинга лежат на codeplex.com.
Cписок ключевых фич, которые войдут в ASP.NET MVC 2. Среди них: Areas, ассинхронные Controller Actions, улучшенная поддержка Dynamic Data, улучшения в кешировании, валидации и другое.
Скандально известная фича RenderAction. Это набор extension-методов (файл ChildActionExtensions), позволющих виду «отрисовывать» внутри себя результат работы любого экшена. Выглядит это примерно так:
<%Html.RenderAction("Controller", "Action"); %>
Как уже упоминалось, эта возможность заимствована из Ruby, откуда она была выкинута всилу своей порочности.
Очень важная фича — MVC 2 не конфликтует с первой версией! Значит на одном компьютере можно установить обе версии. При этом в Visual Studio можно создать проект, использующий любую из установленных версий.
Отдельный пласт нововведений — поддержка шаблонов для отображения и редактирования модели целиком или отдельных ее свойств. Вот очень хороший обзор этой возможности на хабре: Шаблоны отображения и редактирования данных в ASP.NET MVC 2
А можно по подробнее про то, какие именно хелперы появились и как их использовать?
Можно, но нужно проявить немножко терпения :) Чуть позже подредактирую ответ.
А что такое MvcHtmlString и что какая от него выгода?