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
- Скотт Хансельман: выпущены ASP.NET MVC3, WebMatrix, NuGet, IIS Express и Orchard — веб-выпуск Microsoft Январь в контексте
- Скотт Гатри: Объявление о выпуске ASP.NET MVC 3, IIS Express, SQL CE 4, web Farm Framework, Orchard, WebMatrix
- Заметки о выпуске ASP.NET MVC 3
Установка и справка
- Установка ASP.NET MVC 3 с помощью установщика веб-платформы (рекомендуется)
- Установка ASP.NET MVC 3 с помощью исполняемого файла установщика
- Установка ASP.NET MVC 3 для Visual Studio 11 Developer Preview
- Ознакомьтесь с руководством по ASP.NET MVC 3.
- Получите справку и обсудите ASP.NET MVC 3 на форумах
ASP.NET MVC 3 основан на ASP.NET MVC 1 и 2, добавляя отличные функции, которые упрощают код и обеспечивают более глубокую расширяемость. В этом разделе представлен обзор многих новых функций, включенных в этот выпуск, которые представлены в следующих разделах:
- Расширяемое формирование шаблонов с интеграцией MvcScaffold
- Шаблоны проектов с поддержкой HTML 5
- Обработчик представлений Razor
- Поддержка нескольких обработчиков представлений
- Улучшения контроллера
- JavaScript и Ajax
- Улучшения проверки модели
- Улучшения внедрения зависимостей
- Другие новые функции
Новая система формирования шаблонов упрощает процесс продуктивного использования, если вы совершенно не знакомы с платформой, а также автоматизируете распространенные задачи разработки, если у вас есть опыт и вы уже знаете, что вы делаете.
Это поддерживается новым пакетом формирования шаблонов 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 см. в следующих ресурсах:
Стив Сандерсон пост серии, в том числе:
- Введение. Формирование шаблона ASP.NET проекта MVC 3 с помощью пакета MvcScaffolding
- Стандартное использование: типичные варианты и варианты использования
- Отношения "один ко многим"
- Действия формирования шаблонов и модульные тесты
- Переопределение шаблонов T4
- Эта запись: Создание пользовательских шаблонов
Скотт Хансельман пост из его сессии PDC 2010 Создание блога с Microsoft "Неименованный пакет веб-любви"
В диалоговом окне Новый проект установлен флажок Включить html 5 версии шаблонов проектов. Эти шаблоны используют Модернизатор 1.7 для обеспечения поддержки совместимости HTML 5 и CSS 3 в браузерах нижнего уровня.
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 см. в следующих ресурсах:
- Скотт Гатри в блоге введение Razor
- Scott Guthrie's blog post introducing the @model keyword
- Скотт Гатри в блоге введение в макеты Razor
- Краткий справочник по API Razor
- Заметки о выпуске MVC 3
Диалоговое окно Добавление представления в ASP.NET MVC 3 позволяет выбрать подсистему представлений, с которой вы хотите работать, а в диалоговом окне Создать проект можно указать подсистему представлений по умолчанию для проекта. Вы можете выбрать веб-формы обработчик представлений (ASPX), Razor или подсистему представления с открытым кодом, например Spark, NHaml или NDjango.
Иногда требуется выполнить логику до выполнения метода действия или после выполнения метода действия. Для поддержки этого ASP.NET MVC 2 предоставил фильтры действий. Фильтры действий — это настраиваемые атрибуты, которые предоставляют декларативные средства для добавления поведения до и после действия в определенные методы действий контроллера. Однако в некоторых случаях может потребоваться указать поведение до или после действия, которое применяется ко всем методам действия. MVC 3 позволяет указать глобальные фильтры, добавляя их в коллекцию GlobalFilters
. Дополнительные сведения о глобальных фильтрах действий см. в следующих ресурсах:
Контроллеры MVC 2 поддерживают ViewData
свойство , которое позволяет передавать данные в шаблон представления с помощью API словаря с поздним привязкой. В MVC 3 для достижения той же цели также можно использовать несколько более простой синтаксис со свойством ViewBag
. Например, вместо ViewData["Message"]="text"
написания можно написать ViewBag.Message="text"
. Для использования свойства не нужно определять строго типизированные ViewBag
классы. Так как это динамическое свойство, вместо этого можно просто получить или задать свойства, которые будут разрешаться динамически во время выполнения. Внутри словаря ViewBag
свойства хранятся в ViewData
виде пар "имя-значение". (Примечание. В большинстве предварительных версий MVC 3 ViewBag
свойство называлось свойством ViewModel
.)
ActionResult
Следующие типы и соответствующие вспомогательные методы являются новыми или улучшенными в MVC 3:
- HttpNotFoundResult. Возвращает клиенту код состояния HTTP 404.
- RedirectResult. Возвращает временное перенаправление (код состояния HTTP 302) или постоянное перенаправление (код состояния HTTP 301) в зависимости от логического параметра. В сочетании с этим изменением класс Controller теперь имеет три метода для выполнения постоянных перенаправлений:
RedirectPermanent
,RedirectToRoutePermanent
иRedirectToActionPermanent
. Эти методы возвращают экземпляр соRedirectResult
свойствомPermanent
, равнымtrue
. - HttpStatusCodeResult. Возвращает заданный пользователем код состояния HTTP.
По умолчанию Ajax и вспомогательные средства проверки в MVC 3 используют ненавязчивый подход JavaScript. Ненавязчивый Код JavaScript позволяет избежать внедрения встроенного Кода JavaScript в HTML. Это делает HTML меньше и меньше загромождения, а также упрощает переключение или настройку библиотек JavaScript. Вспомогательные средства проверки в MVC 3 также используют подключаемый jQueryValidate
модуль по умолчанию. Если требуется поведение MVC 2, можно отключить ненавязчивый JavaScript с помощью параметра файлаweb.config . Дополнительные сведения об улучшениях JavaScript и Ajax см. в следующих ресурсах:
- Базовое введение в ненавязчивый JavaScript на сайте Википедии
- Бред Уилсон в ненавязчивой записи JavaScript
- Ненавязчивый пост проверки JavaScript Брэда Уилсона
- Создание приложения MVC 3 с помощью Razor и ненавязчивого JavaScript (руководство на сайте ASP.NET)
- Заметки о выпуске MVC 3
В более ранних версиях 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.
ASP.NET MVC 3 включает встроенную поддержку привязки JSON, которая позволяет методам действий получать данные в кодировке JSON и привязывать их модели к параметрам метода действия. Эта возможность полезна в сценариях, связанных с клиентскими шаблонами и привязкой данных. (Шаблоны клиента позволяют форматировать и отображать один элемент данных или набор элементов данных с помощью шаблонов, выполняемых на клиенте.) MVC 3 позволяет легко подключать клиентские шаблоны к методам действий на сервере, которые отправляют и получают данные JSON. Дополнительные сведения о поддержке привязок JSON см. в разделе Улучшения JavaScript и AJAX в записи блога Скотта Гатри MVC 3 Preview.
ASP.NET MVC 3 поддерживает DataAnnotations
атрибуты метаданных, такие как DisplayAttribute
.
Класс 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 см. в следующих ресурсах:
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.
ASP.NET MVC поддерживает кэширование выходных данных полностраничных ответов начиная с версии 1. MVC 3 также поддерживает кэширование частичного вывода страницы, что позволяет легко кэшировать области или фрагменты ответа. Дополнительные сведения о кэшировании см. в разделе Кэширование частичного вывода страницыв записи блога Скотта Гатри о кандидате на выпуск MVC 3 и в разделе Кэширование выходных данных дочерних действийв заметках о выпуске MVC 3.
ASP.NET MVC имеет встроенную проверку запросов, которая автоматически помогает защититься от атак XSS и атак путем внедрения КОДА HTML. Однако иногда требуется явно отключить проверку запросов, например разрешить пользователям публиковать HTML-содержимое (например, в записях блога или содержимом CMS). Теперь можно добавить атрибут AllowHtml в модели или модели представления, чтобы отключить проверку запросов на основе каждого свойства во время привязки модели. Дополнительные сведения о проверке запроса см. в следующих ресурсах:
- Раздел Ненавязчивый JavaScript и проверка в записи блога Скотта Гатри о кандидате на выпуск MVC 3.
- Заметки о выпуске MVC 3
В ASP.NET MVC 3 можно добавлять шаблоны проектов, обработчики представлений и платформы проектов модульного тестирования в диалоговое окно Новый проект .
ASP.NET шаблонов MVC 3 лучше определять свойства первичного ключа в моделях и обрабатывать их соответствующим образом, чем в более ранних версиях MVC. (Например, шаблоны формирования шаблонов теперь позволяют убедиться, что первичный ключ не является шаблоном в редактируемом поле формы.)
По умолчанию в шаблонах создания и редактирования теперь используется Html.EditorFor
вспомогательный элемент, а не вспомогательный Html.TextBoxFor
. Это улучшает поддержку метаданных в модели в виде атрибутов заметки к данным, когда диалоговое окно Добавление представления создает представление.
Добавлены новые перегрузки методов для вспомогательных LabelFor
методов и LabelForModel
. Новые перегрузки позволяют указать или переопределить текст метки.
В ASP.NET MVC 3 можно указать, должен ли класс контроллера использовать состояние сеанса, и если да, должно ли быть состояние сеанса для чтения и записи или только для чтения. Дополнительные сведения о поддержке контроллера без сеанса см. в заметках о выпуске MVC 3.
Для заполнения словаря ModelMetadata.AdditionalValues
для свойства модели можно использовать атрибут AdditionalMetadata. Например, если модель представления имеет свойство, которое должно отображаться только администратору, можно добавить к ней заметки, как показано в следующем примере:
public class ProductViewModel
{
[AdditionalMetadata("AdminOnly", true)]
public string RefundCode {get; set;}
}
Эти метаданные доступны для любого шаблона отображения или редактора при отрисовки модели представления продукта. Интерпретировать сведения о метаданных нужно только вам.
AccountController в шаблоне проекта Интернета был значительно улучшен.
Добавлен новый шаблон проекта интрасети, который включает проверку подлинности Windows и удаляет AccountController.