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

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

Обзор MVC 3 для ASP.NET

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

Расширяемый каркас с интеграцией MvcScaffold

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

Это поддерживается новым пакетом шаблонов 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) и комбинировать их.

Обновление средств MVC 3 ASP.NET включает большую поддержку 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 указывает, что проверка клиента вызовет действие с именем UserNameAvailable в классе UsersController для проверки поля 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 (предварительная версия).

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

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

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

Класс ValidationAttribute

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

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 обнаруживать во время выполнения, имеет ли валидатор поддержку клиентской валидации. Этот интерфейс разработан таким образом, чтобы его можно было интегрировать с различными платформами проверки.

Дополнительные сведения об интерфейсах проверки см. в разделе «Улучшения проверки модели» блога «Предварительная версия MVC 3» Скотта Гатри. (Однако обратите внимание, что ссылка на "IValidateObject" в блоге должна быть "IValidatableObject".

Улучшение внедрения зависимостей

ASP.NET MVC 3 обеспечивает лучшую поддержку применения внедрения зависимостей (DI) и интеграции с контейнерами внедрения зависимостей или инверсии элементов управления (IOC). Добавлена поддержка DI в следующих областях:

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

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

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

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

Интеграция с помощью NuGet

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

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

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

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

Частичное кэширование выходных данных страницы

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"

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

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

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

Улучшения в AccountController

Контроллер учетных записей (AccountController) в шаблоне интернет-проекта был существенно улучшен.

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

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