ASP.NET MVC 3

(включает обновление средств за апрель 2011 г.)

ASP.NET MVC 3 — это платформа для создания масштабируемых, основанных на стандартах веб-приложений с использованием хорошо зарекомендовавших себя шаблонов проектирования, а также ASP.NET и платформа .NET Framework.

Он устанавливается параллельно с ASP.NET MVC 2, так что начните использовать его уже сегодня!

Скачайте установщик здесь.

Основные возможности

  • Встроенная система формирования шаблонов, расширяемая с помощью NuGet
  • Шаблоны проектов с поддержкой HTML 5
  • Выразительные представления, включая новую подсистему представлений Razor
  • Мощные обработчики с внедрением зависимостей и глобальными фильтрами действий
  • Многофункциональная поддержка JavaScript с ненавязчивым JavaScript, проверкой jQuery и привязкой JSON
  • Ознакомьтесь с полным списком функций ниже.

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

Установка и справка

ASP.NET MVC 3 Overview

ASP.NET MVC 3 основан на ASP.NET MVC 1 и 2, добавляя отличные функции, которые упрощают код и обеспечивают более глубокую расширяемость. В этом разделе представлен обзор многих новых функций, включенных в этот выпуск, которые представлены в следующих разделах:

Расширяемое формирование шаблонов с интеграцией MvcScaffold

Новая система формирования шаблонов упрощает процесс продуктивного использования, если вы совершенно не знакомы с платформой, а также автоматизируете распространенные задачи разработки, если у вас есть опыт и вы уже знаете, что вы делаете.

Это поддерживается новым пакетом формирования шаблонов NuGet под названием MvcScaffolding. Термин "Формирование шаблонов" используется многими технологиями программного обеспечения для обозначения "быстрого создания базовой структуры программного обеспечения, которую затем можно редактировать и настраивать". Пакет формирования шаблонов, который мы создаем для ASP.NET MVC, очень полезен в нескольких сценариях:

  • Если вы впервые изучаете ASP.NET MVC, так как это дает вам быстрый способ получить полезный рабочий код, который затем можно редактировать и адаптировать в соответствии со своими потребностями. Это спасает вас от травмы, глядя на пустую страницу и не имея ни малейшего представления, с чего начать!
  • Если вы хорошо знаете ASP.NET MVC и теперь изучаете некоторые новые технологии надстройки , такие как объектно-реляционный сопоставительный модуль, модуль представления, библиотека тестирования и т. д., так как создатель этой технологии, возможно, также создал для нее пакет формирования шаблонов.
  • Если ваша работа включает в себя многократное создание похожих классов или файлов какого-либо рода, так как вы можете создавать пользовательские шаблоны, которые выводят тестовые средства, скрипты развертывания или все, что вам нужно. Все сотрудники вашей команды также могут использовать пользовательские шаблоны.

К другим функциям MvcScaffolding относятся:

  • Поддержка проектов C# и VB
  • Поддержка обработчиков представлений Razor и ASPX
  • Поддерживает формирование шаблонов в ASP.NET областях MVC и использование пользовательских макетов и образцов представлений
  • Вы можете легко настроить выходные данные, изменив шаблоны T4.
  • Вы можете добавлять совершенно новые шаблоны с помощью пользовательской логики PowerShell и пользовательских шаблонов T4. Эти (и все предоставленные вами пользовательские параметры) автоматически отображаются в списке завершения вкладок консоли.
  • Вы можете получить пакеты NuGet, содержащие дополнительные шаблоны для различных технологий (например, есть подтверждение концепции для LINQ to SQL сейчас), и смешивать и сопоставлять их вместе.

Обновление средств ASP.NET MVC 3 включает отличную поддержку этой системы формирования шаблонов в Visual Studio, например:

  • Диалоговое окно добавления контроллера теперь поддерживает полное автоматическое формирование шаблонов для действий контроллера создания, чтения, обновления и удаления и соответствующих представлений. По умолчанию этот шаблон формирует код доступа к данным с помощью EF Code First.
  • Диалоговое окно добавления контроллера поддерживает расширяемые шаблоны с помощью пакетов NuGet, таких как MvcScaffolding. Это позволяет подключать пользовательские шаблоны в диалоговом окне, что позволит вам создавать шаблоны для других технологий доступа к данным, таких как NHibernate или даже JET с ODBCDirect, если вы так склонны!

Дополнительные сведения о формировании шаблонов в ASP.NET MVC 3 см. в следующих ресурсах:

Шаблоны проектов HTML 5

В диалоговом окне Новый проект установлен флажок Включить html 5 версии шаблонов проектов. Эти шаблоны используют Модернизатор 1.7 для обеспечения поддержки совместимости HTML 5 и CSS 3 в браузерах нижнего уровня.

Обработчик представлений Razor

ASP.NET MVC 3 поставляется с новой подсистемой просмотра Razor, которая предлагает следующие преимущества:

  • Синтаксис Razor является чистым и кратким и требует минимального количества нажатий клавиш.
  • Razor легко изучить, отчасти потому, что он основан на существующих языках, таких как C# и Visual Basic.
  • Visual Studio включает IntelliSense и цветообразование кода для синтаксиса Razor.
  • Представления Razor можно выполнить модульное тестирование без необходимости запуска приложения или веб-сервера.

Ниже перечислены некоторые новые возможности Razor.

  • @model синтаксис для указания типа, передаваемого в представление.
  • @* *@ синтаксис комментариев.
  • Возможность указать значения по умолчанию (например, layoutpage) один раз для всего сайта.
  • Метод Html.Raw отображения текста без кодировки HTML.
  • Поддержка совместного использования кода несколькими представлениями (файлы _viewstart.cshtml или _viewstart.vbhtml ).

Razor также включает новые вспомогательные функции HTML, например следующие:

  • Chart. Отрисовывает диаграмму, предлагая те же функции, что и элемент управления диаграммы в ASP.NET 4.
  • WebGrid. Отрисовывает сетку данных в комплекте с функциями разбиения по страницам и сортировки.
  • Crypto. Использует алгоритмы хэширования для создания правильно соленых и хэшированных паролей.
  • WebImage. Отрисовывает изображение.
  • WebMail. Отправляет сообщение электронной почты.

Дополнительные сведения о Razor см. в следующих ресурсах:

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

Диалоговое окно Добавление представления в ASP.NET MVC 3 позволяет выбрать подсистему представлений, с которой вы хотите работать, а в диалоговом окне Создать проект можно указать подсистему представлений по умолчанию для проекта. Вы можете выбрать веб-формы обработчик представлений (ASPX), Razor или подсистему представления с открытым кодом, например Spark, NHaml или NDjango.

Улучшения контроллера

Глобальные фильтры действий

Иногда требуется выполнить логику до выполнения метода действия или после выполнения метода действия. Для поддержки этого ASP.NET MVC 2 предоставил фильтры действий. Фильтры действий — это настраиваемые атрибуты, которые предоставляют декларативные средства для добавления поведения до и после действия в определенные методы действий контроллера. Однако в некоторых случаях может потребоваться указать поведение до или после действия, которое применяется ко всем методам действия. MVC 3 позволяет указать глобальные фильтры, добавляя их в коллекцию GlobalFilters . Дополнительные сведения о глобальных фильтрах действий см. в следующих ресурсах:

Новое свойство ViewBag

Контроллеры MVC 2 поддерживают ViewData свойство , которое позволяет передавать данные в шаблон представления с помощью API словаря с поздним привязкой. В MVC 3 для достижения той же цели также можно использовать несколько более простой синтаксис со свойством ViewBag . Например, вместо ViewData["Message"]="text"написания можно написать ViewBag.Message="text". Для использования свойства не нужно определять строго типизированные ViewBag классы. Так как это динамическое свойство, вместо этого можно просто получить или задать свойства, которые будут разрешаться динамически во время выполнения. Внутри словаря ViewBag свойства хранятся в ViewData виде пар "имя-значение". (Примечание. В большинстве предварительных версий MVC 3 ViewBag свойство называлось свойством ViewModel .)

Новые типы ActionResult

ActionResult Следующие типы и соответствующие вспомогательные методы являются новыми или улучшенными в MVC 3:

  • HttpNotFoundResult. Возвращает клиенту код состояния HTTP 404.
  • RedirectResult. Возвращает временное перенаправление (код состояния HTTP 302) или постоянное перенаправление (код состояния HTTP 301) в зависимости от логического параметра. В сочетании с этим изменением класс Controller теперь имеет три метода для выполнения постоянных перенаправлений: RedirectPermanent, RedirectToRoutePermanentи RedirectToActionPermanent. Эти методы возвращают экземпляр со RedirectResult свойством Permanent , равным true.
  • HttpStatusCodeResult. Возвращает заданный пользователем код состояния HTTP.

Улучшения JavaScript и Ajax

По умолчанию Ajax и вспомогательные средства проверки в MVC 3 используют ненавязчивый подход JavaScript. Ненавязчивый Код JavaScript позволяет избежать внедрения встроенного Кода JavaScript в HTML. Это делает HTML меньше и меньше загромождения, а также упрощает переключение или настройку библиотек JavaScript. Вспомогательные средства проверки в MVC 3 также используют подключаемый jQueryValidate модуль по умолчанию. Если требуется поведение MVC 2, можно отключить ненавязчивый JavaScript с помощью параметра файлаweb.config . Дополнительные сведения об улучшениях JavaScript и Ajax см. в следующих ресурсах:

Проверка Client-Side включена по умолчанию

В более ранних версиях MVC необходимо явно вызвать Html.EnableClientValidation метод из представления, чтобы включить проверку на стороне клиента. В MVC 3 это больше не требуется, так как проверка на стороне клиента включена по умолчанию. (Это можно отключить с помощью параметра в файлеweb.config .)

Чтобы проверка на стороне клиента работала, необходимо ссылаться на соответствующие библиотеки jQuery и jQuery Validation на сайте. Вы можете разместить эти библиотеки на собственном сервере или ссылаться на них из сети доставки содержимого (CDN), например cdn от Майкрософт или Google.

Удаленный проверяющий элемент управления

ASP.NET MVC 3 поддерживает новый класс RemoteAttribute , который позволяет использовать поддержку удаленного проверяющего средства проверки в подключаемом модуле проверки jQuery. Это позволяет библиотеке проверки на стороне клиента автоматически вызывать пользовательский метод, определяемый на сервере, для выполнения логики проверки, которая может выполняться только на стороне сервера.

В следующем примере атрибут указывает, Remote что проверка клиента вызовет действие с UsersController именем UserNameAvailable для класса для проверки 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 статье Практическое руководство. Реализация удаленной проверки в ASP.NET MVC в библиотеке MSDN.

Поддержка привязки JSON

ASP.NET MVC 3 включает встроенную поддержку привязки JSON, которая позволяет методам действий получать данные в кодировке JSON и привязывать их модели к параметрам метода действия. Эта возможность полезна в сценариях, связанных с клиентскими шаблонами и привязкой данных. (Шаблоны клиента позволяют форматировать и отображать один элемент данных или набор элементов данных с помощью шаблонов, выполняемых на клиенте.) MVC 3 позволяет легко подключать клиентские шаблоны к методам действий на сервере, которые отправляют и получают данные JSON. Дополнительные сведения о поддержке привязок JSON см. в разделе Улучшения JavaScript и AJAX в записи блога Скотта Гатри MVC 3 Preview.

Улучшения проверки модели

Атрибуты метаданных DataAnnotations

ASP.NET MVC 3 поддерживает DataAnnotations атрибуты метаданных, такие как DisplayAttribute.

Класс ValidationAttribute

Класс ValidationAttribute был улучшен в платформа .NET Framework 4 для поддержки новой IsValid перегрузки, которая предоставляет дополнительные сведения о текущем контексте проверки, например о проверяемом объекте. Это обеспечивает более широкие возможности сценариев, в которых можно проверить текущее значение на основе другого свойства модели. Например, новый CompareAttribute атрибут позволяет сравнивать значения двух свойств модели. В следующем примере свойство должно соответствовать полюPassword, ComparePassword чтобы быть допустимым.

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). Добавлена поддержка внедрения зависимостей в следующих областях:

  • Контроллеры (регистрация и внедрение фабрик контроллеров, внедрение контроллеров).
  • Представления (регистрация и внедрение обработчиков представлений, внедрение зависимостей в страницы представлений).
  • Фильтры действий (поиск и внедрение фильтров).
  • Связыватели модели (регистрация и внедрение).
  • Поставщики проверки модели (регистрация и внедрение).
  • Поставщики метаданных модели (регистрация и внедрение).
  • Поставщики значений (регистрация и внедрение).

MVC 3 поддерживает библиотеку указателя Common Service и любой контейнер di, поддерживающий интерфейс этой библиотеки IServiceLocator . Кроме того, он поддерживает новый IDependencyResolver интерфейс, упрощающий интеграцию платформ внедрения зависимостей.

Дополнительные сведения о di в MVC 3 см. в следующих ресурсах:

Другие новые функции

Интеграция с NuGet

ASP.NET MVC 3 автоматически устанавливает и включает NuGet в процессе установки. NuGet — это бесплатный диспетчер пакетов с открытым кодом, который упрощает поиск, установку и использование библиотек и средств .NET в проектах. Он работает со всеми типами проектов Visual Studio (включая ASP.NET Web Forms и ASP.NET MVC).

NuGet позволяет разработчикам, которые поддерживают открытый код проектов (например, такие проекты, как Moq, NHibernate, Ninject, StructureMap, NUnit, Windsor, RhinoMocks и Elmah), упаковать свои библиотеки и зарегистрировать их в онлайн-коллекции. Разработчики .NET, которые хотят использовать одну из этих библиотек, смогут легко найти пакет и установить его в проектах, над которыми они работают.

При обновлении средств ASP.NET 3 шаблоны проектов включают предварительно установленные пакеты NuGet библиотеки JavaScript, поэтому они обновляются с помощью NuGet. Entity Framework Code First также предварительно установлен в виде пакета NuGet.

Дополнительные сведения о NuGet см. в документации по NuGet.

Кэширование выходных данных Partial-Page

ASP.NET MVC поддерживает кэширование выходных данных полностраничных ответов начиная с версии 1. MVC 3 также поддерживает кэширование частичного вывода страницы, что позволяет легко кэшировать области или фрагменты ответа. Дополнительные сведения о кэшировании см. в разделе Кэширование частичного вывода страницыв записи блога Скотта Гатри о кандидате на выпуск MVC 3 и в разделе Кэширование выходных данных дочерних действийв заметках о выпуске MVC 3.

Детализированный контроль над проверкой запросов

ASP.NET MVC имеет встроенную проверку запросов, которая автоматически помогает защититься от атак XSS и атак путем внедрения КОДА HTML. Однако иногда требуется явно отключить проверку запросов, например разрешить пользователям публиковать HTML-содержимое (например, в записях блога или содержимом CMS). Теперь можно добавить атрибут AllowHtml в модели или модели представления, чтобы отключить проверку запросов на основе каждого свойства во время привязки модели. Дополнительные сведения о проверке запроса см. в следующих ресурсах:

Расширяемое диалоговое окно "Новый проект"

В ASP.NET MVC 3 можно добавлять шаблоны проектов, обработчики представлений и платформы проектов модульного тестирования в диалоговое окно Новый проект .

Улучшения формирования шаблонов шаблонов

ASP.NET шаблонов MVC 3 лучше определять свойства первичного ключа в моделях и обрабатывать их соответствующим образом, чем в более ранних версиях MVC. (Например, шаблоны формирования шаблонов теперь позволяют убедиться, что первичный ключ не является шаблоном в редактируемом поле формы.)

По умолчанию в шаблонах создания и редактирования теперь используется Html.EditorFor вспомогательный элемент, а не вспомогательный Html.TextBoxFor . Это улучшает поддержку метаданных в модели в виде атрибутов заметки к данным, когда диалоговое окно Добавление представления создает представление.

Новые перегрузки для Html.LabelFor и Html.LabelForModel

Добавлены новые перегрузки методов для вспомогательных LabelFor методов и LabelForModel . Новые перегрузки позволяют указать или переопределить текст метки.

Поддержка контроллера без сеанса

В ASP.NET MVC 3 можно указать, должен ли класс контроллера использовать состояние сеанса, и если да, должно ли быть состояние сеанса для чтения и записи или только для чтения. Дополнительные сведения о поддержке контроллера без сеанса см. в заметках о выпуске MVC 3.

Новый класс AdditionalMetadataAttribute

Для заполнения словаря ModelMetadata.AdditionalValues для свойства модели можно использовать атрибут AdditionalMetadata. Например, если модель представления имеет свойство, которое должно отображаться только администратору, можно добавить к ней заметки, как показано в следующем примере:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

Эти метаданные доступны для любого шаблона отображения или редактора при отрисовки модели представления продукта. Интерпретировать сведения о метаданных нужно только вам.

Улучшения AccountController

AccountController в шаблоне проекта Интернета был значительно улучшен.

Новый шаблон проекта интрасети

Добавлен новый шаблон проекта интрасети, который включает проверку подлинности Windows и удаляет AccountController.