Заметки о выпуске ASP.NET MVC 3

Общие сведения

В этом документе описывается выпуск ASP.NET MVC 3 RTM для Visual Studio 2010. ASP.NET MVC — это платформа для разработки веб-приложений, в котором используется шаблон "модель—представление-контроллер" (MVC). Установщик ASP.NET MVC 3 включает следующие компоненты:

  • ASP.NET компонентов среды выполнения MVC 3
  • средства ASP.NET MVC 3 Visual Studio 2010
  • веб-страницы ASP.NET компонентов времени выполнения
  • средства веб-страницы ASP.NET Visual Studio 2010
  • Диспетчер пакетов Майкрософт для .NET (NuGet)
  • Обновление для Visual Studio 2010, включающее поддержку синтаксиса Razor. (Дополнительные сведения см. в статье базы знаний 2483190.)

Полный набор заметок о выпуске для каждой предварительной версии ASP.NET MVC 3 см. на веб-сайте ASP.NET по URL-адресу:

https://www.asp.net/learn/whitepapers/mvc3-release-notes

Замечания по установке

Чтобы установить ASP.NET MVC 3 RTM с помощью установщика веб-платформы (Web PI), перейдите на следующую страницу:

https://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

Кроме того, установщик для ASP.NET MVC 3 RTM для Visual Studio 2010 можно скачать на следующей странице:

https://go.microsoft.com/fwlink/?LinkID=208140

ASP.NET MVC 3 можно установить и запустить параллельно с ASP.NET MVC 2.

Требования к программному обеспечению

Для компонентов времени выполнения ASP.NET MVC 3 требуется следующее программное обеспечение:

  • платформа .NET Framework версии 4.

    Для компонентов времени выполнения ASP.NET MVC 3 Visual Studio 2010 требуется следующее программное обеспечение:

  • Visual Studio 2010 или Visual Web Developer 2010 Express.

Документация

Документация по ASP.NET MVC доступна на веб-сайте MSDN по следующему URL-адресу:

https://go.microsoft.com/fwlink/?LinkId=205717

Руководства и другие сведения о ASP.NET MVC доступны на странице MVC веб-сайта ASP.NET по следующему URL-адресу:

https://www.asp.net/mvc/

Поддержка

Этот выпуск полностью поддерживается. Сведения о получении технической поддержки можно найти на веб-сайте служба поддержки Майкрософт.

Задавайте вопросы об этом выпуске на форуме ASP.NET MVC, где участники сообщества ASP.NET помогают друг другу, предоставляя полезные сведения:

https://forums.asp.net/1146.aspx

Обновление проекта ASP.NET MVC 2 до ASP.NET обновления средств MVC 3

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

Для обновления существующего приложения ASP.NET MVC 2 до версии 3 вручную выполните следующие действия.

  1. Создайте пустой проект ASP.NET MVC 3 на компьютере. Этот проект будет содержать некоторые файлы, необходимые для обновления.

  2. Скопируйте следующие файлы из проекта ASP.NET MVC 3 в папку проекта ASP.NET MVC 2. Необходимо обновить все ссылки на библиотеку jQuery с указанием нового имени файла ( jQuery-1.5.1.js):

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. Скопируйте папку packages из корня пустого решения проекта ASP.NET MVC 3 в корень решения, который находится в каталоге, где находится SLN-файл решения.

  4. Если проект ASP.NET MVC 2 содержит какие-либо области, скопируйте файл /Views/Web.config в папку Views каждой области.

  5. В обоих файлах Web.config проекта ASP.NET MVC 2 выполните глобальный поиск и замените версию ASP.NET MVC. Выполните поиск следующих данных:

    System.Web.Mvc, Version=2.0.0.0
    

    Замените его следующим кодом:

    System.Web.Mvc, Version=3.0.0.0
    
  6. В Обозреватель решений удалите ссылку на System.Web.Mvc (которая указывает на библиотеку DLL версии 2), а затем добавьте ссылку на System.Web.Mvc (версия 3.0.0.0).

  7. Добавьте ссылку на System.Web.WebPages.dll и System.Web.Helpers.dll. Эти сборки расположены в следующих папках:

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  8. В Обозревателе решений щелкните правой кнопкой имя проекта и выберите команду Выгрузить проект. Затем снова щелкните правой кнопкой мыши имя проекта и выберите Изменить имя проекта.csproj.

  9. Найдите элемент ProjectTypeGuids и замените {F85E285D-A4E0-4152-9332-AB1D724D3325} на {E53F8FEA-EAE0-44A6-8774-FFD645390401}.

  10. Сохраните изменения, щелкните правой кнопкой проект и выберите команду Перезагрузить проект.

  11. В корневом файле Web.config приложения добавьте следующие параметры в раздел сборок .

    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, 
         PublicKeyToken=31BF3856AD364E35" />
    
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral,
         PublicKeyToken=31BF3856AD364E35" />
    
  12. Если проект ссылается на сторонние библиотеки, скомпилированные с помощью ASP.NET MVC 2, добавьте следующий выделенный элемент bindingRedirect в файл Web.config в корне приложения в разделе конфигурации :

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc"
               publicKeyToken="31bf3856ad364e35"/>
           <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
         </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

Изменения, включенные в обновление средств ASP.NET MVC 3

В этом разделе описываются изменения обновления средств ASP.NET MVC 3 по сравнению с RTM-выпуском ASP.NET MVC 3.

Диалоговое окно "Добавление контроллера" теперь позволяет формировать контроллеры с представлениями и кодом доступа к данным.

Формирование шаблонов — это быстрый способ формирования контроллеров и представления для приложения. После создания кода его можно изменить в соответствии с требованиями проекта.

Чтобы открыть диалоговое окно Добавление контроллера в ASP.NET MVC 3, щелкните правой кнопкой мыши папку Контроллеры в Обозреватель решений, выберите добавить, а затем контроллер. Это диалоговое окно улучшено и теперь предоставляет дополнительные параметры формирования шаблонов.

Снимок экрана: диалоговое окно

По умолчанию доступно три шаблона.

Пустой контроллер

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

Контроллер с пустыми действиями чтения и записи

Этот шаблон создает файл контроллера со всеми необходимыми методами, но без реализации их кода. Этот шаблон эквивалентен проверке добавления действий для сценариев создания, изменения, сведений и удаления в предыдущих версиях ASP.NET MVC. При выборе данного шаблона другие параметры недоступны.

Контроллер с действиями чтения и записи и представлениями с использованием платформы Entity Framework

Этот шаблон позволяет быстро создавать интерфейс пользователя для ввода данных. Он создает код, обрабатывающий ряд общих требований и сценариев, таких как следующие:

  • Доступ к данным. Созданный код читает сущности из базы данных и записывает их. Он работает с подходом Entity Framework Code First, если вы выбираете существующий класс контекста данных или позволяете шаблону создать новый класс DbContext . Он также работает с подходом Entity Framework Database First или Model First, если выбран существующий класс ObjectContext .

  • Validation (Проверка). Созданный код использует привязку к модели ASP.NET MVC и метаданные для проверки передачи форм в соответствии с правилами, объявленными в классе модели. Сюда входят встроенные правила проверки, такие как атрибуты Required и StringLength , а также настраиваемые правила проверки.

  • Отношения "один ко многим". Если определить связи "один ко многим" внешнего ключа между классами модели, созданный код сформирует раскрывающиеся списки для выбора связанных сущностей. Например, можно определить следующие классы модели в соответствии с соглашениями Entity Framework Code First:

    public class Product
    {
         public int ProductId { get; set; }
         [Required]
         public string Name { get; set; }
    
         // Product belongs to Category
         public int CategoryId { get; set; }
         public virtual Category Category { get; set; }
    }
    public class Category
    {
         public int CategoryId { get; set; }
         [Required]
         public string Name { get; set; }
    }
    

    При формировании шаблона контроллера для класса Product его представления позволят пользователям выбирать объект Category для каждого экземпляра Product .

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

  • Если используется Entity Framework Code First, можно выбрать любой класс модели.

  • При использовании подхода Entity Framework Database First или Entity Framework Model First следует выбрать класс сущности, определенный в концептуальной модели.

Для класса Контекст данных можно выбрать следующие варианты:

  • Если вы хотите использовать Code First и у вас нет существующего класса контекста данных, выберите **Новый контекст данных **. После этого будет создан контекста класса данных.
  • Если применяется подход Code First и существует класс контекста данных, выберите его. Он будет загружен для использования выбранного класса модели.
  • При использовании подхода Database First или Model First выберите класс контекста объекта.

Для представлений выберите модуль просмотра, который будет использоваться, или параметр Нет, если не требуется формировать представления.

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

Усовершенствования диалогового окна "Создание проекта ASP.NET MVC 3"

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

Снимок экрана: диалоговое окно нового проекта. Выделены значок

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

В списке Шаблон проекта содержится новый шаблон Приложение интрасети. Он содержит параметры для создания веб-приложения с использованием проверки подлинности Windows вместо проверки подлинности на основе форм. Так как приложению интрасети требуются некоторые параметры IIS, которые не могут быть инкапсулированы в шаблон проекта, шаблон содержит файл сведений с инструкциями по созданию шаблона проекта в IIS. Документация по новому шаблону приложения интрасети доступна на веб-сайте MSDN по следующему URL-адресу:

https://msdn.microsoft.com/library/gg703322(VS.98).aspx

Шаблоны проектов теперь поддерживают HTML5

Диалоговое окно создания проекта теперь содержит параметр добавления функций HTML5 в шаблоны проектов. Выбор параметра приводит к созданию представлений, содержащих новые элементы HTML5 <header>, <footer>и <navigation> .

Учтите, более ранние версии браузеров не поддерживают теги HTML5. Для устранения этой проблемы шаблоны проектов HTML5 содержат ссылку на библиотеку Modernizr. (См. следующий раздел.)

В шаблоны проектов добавлена библиотека Modernizr 1.7

Modernizr — это библиотека JavaScript, которая обеспечивает поддержку CSS 3 и HTML5 в браузерах, которые не поддерживают эти функции. Эта библиотека включена как предварительно установленный пакет NuGet в шаблонах для проектов ASP.NET MVC 3. Дополнительные сведения о модернизаторе см. в разделе http://www.modernizr.com/.

В шаблоны проектов включены обновленные версии jQuery, jQuery UI и jQuery Validation

Шаблоны проектов теперь содержат следующие версии скриптов jQuery:

  • jQuery 1.5.1;
  • jQuery Validation 1.8;
  • jQuery UI 1.8.11.

Эти библиотеки включены в виде предустановленных пакетов NuGet.

В шаблоны проектов добавлена платформа ADO.NET Entity Framework 4.1 в виде предустановленного пакета NuGet

Платформа ADO.NET Entity Framework 4.1 поддерживает возможность Code First. Code First — это новый шаблон разработки для платформы ADO.NET Entity Framework, предоставляющий альтернативу существующим шаблонам Database First и Model First.

Шаблон Code First предназначен для определения модели с помощью классов POCO ("старые объекты CLR"), написанных на Visual Basic или C#. Эти классы затем можно сопоставить с существующей базой данных или использовать для создании схемы базы данных. Дополнительную конфигурацию можно предоставить с помощью атрибутов DataAnnotations или с помощью текучих API.

Документация по использованию Code Firstwith ASP.NET MVC доступна на веб-сайте ASP.NET по следующим URL-адресам:

https://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs https://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

В шаблоны проектов включены библиотеки JavaScript в виде предустановленных пакетов NuGet

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

Например, с учетом частоты выхода новых выпусков jQuery версия jQuery, включенная в шаблон проекта, через какое-то время устареет. Но так как компонент jQuery включен как устанавливаемый пакет NuGet, пользователь будет уведомлен в диалоговом окне NuGet о доступности новых версий jQuery.

Так как jQuery включает номер версии в имя файла, обновление jQuery до последней версии также требует обновления тега <script> , который ссылается на файл jQuery, чтобы использовать новое имя файла. Другие включенные библиотеки скриптов не содержат номер версии в имени скрипта, поэтому их можно легко обновить до последних версий.

Известные проблемы в ASP.NET MVC 3

  • В некоторых случаях установка может завершиться ошибкой с сообщением "Сбой установки с кодом ошибки (0x80070643)". Сведения о том, как обойти эту проблему, см. в статье Базы знаний 2531566.
  • При формировании шаблонов для добавления контроллера не формируются сущности, использующие преимущества поддержки наследования сущностей в платформе Entity Framework. Например, при использовании базового класса Person , унаследованного классом Student , формирование шаблонов для класса Student приведет к созданию кода, который не компилируется.
  • Создание нового проекта ASP.NET MVC 3 в папке решения приводит к ошибке NullReferenceException . Устранить эту проблему можно, создав проект ASP.NET MVC 3 в корневой папке решения и переместив его в папку решения.
  • Синтаксис IntelliSense и Razor не работает, если установлен ReSharper. Если у вас установлен ReSharper и вы хотите воспользоваться поддержкой Razor IntelliSense в ASP.NET MVC 3, см. запись Razor Intellisense и ReSharper в блоге Hadi Hariri, где обсуждаются способы их совместного использования сегодня.
  • Во время установки условия лицензионного соглашения отображаются в меньшем окне, чем это требуется.
  • При редактировании представления Razor (.cshtml или .vbhtml-файл ), views. ASP.NET MVC 3 не включает фрагменты для представлений Razor. aspxselecting a code фрагмент для ASP.NET MVC будет отображать фрагменты кода для
  • Если вы установили ASP.NET MVC 3 для Visual Web Developer Express на компьютере, где visual Studio не установлена, а затем установите Visual Studio позже, необходимо переустановить ASP.NET MVC 3. Visual Studio и Visual Web Developer Express совместно используют компоненты, которые обновляются с помощью установщика MVC 3 ASP.NET. То же относится и к установке ASP.NET MVC 3 для Visual Studio на компьютере, на котором нет Visual Web Developer Express, и последующей установке Visual Web Developer Express.

Изменения в ASP.NET MVC 3 RTM

В этом разделе описываются изменения и исправления ошибок, внесенные в ASP.NET MVC 3 RTM с момента выпуска RC2.

Изменение: обновлена версия пользовательского интерфейса jQuery до версии 1.8.7.

Шаблоны проектов ASP.NET MVC для Visual Studio были обновлены для включения последней версии библиотеки пользовательского интерфейса jQuery. Шаблоны также включают минимальный набор файлов ресурсов, необходимых для пользовательского интерфейса jQuery, например связанные файлы CSS и изображения.

Изменение. По умолчанию ModelMetadataProvider был изменен на DataAnnotationsModelMetadataProvider.

В выпуске RC2 ASP.NET MVC 3 появился класс CachedDataAnnotationsMetadataProvider , обеспечивающий кэширование поверх существующего класса DataAnnotationsModelMetadataProvider в качестве повышения производительности. Однако в этой реализации сообщалось о некоторых ошибках, поэтому изменения были возвращены и перенесены в проект MVC Futures, который доступен на ASP.NET WebStack.

Исправлено. Вставка части выражения Razor, содержащей пробелы, приводит к тому, что она будет отменена.

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

@SomeMethod("first param",
100)
@AnotherMethod()

Если выбрать текст first param в первом методе и вставить его в качестве аргумента во второй метод, результат будет следующим:

@AnotherMethod(param""first)

Правильное поведение заключается в том, что операция вставки должна привести к следующему результату:

@AnotherMethod("first param")

Эта проблема была исправлена в выпуске RTM, чтобы выражение правильно сохранялось во время операции вставки.

Исправлено. Переименование файла Razor, открытого в редакторе, отключает цветовую разметку синтаксиса и IntelliSense.

Переименование файла Razor с помощью Обозреватель решений при открытии файла в окне редактора приводит к тому, что выделение синтаксиса и intelliSense перестает работать для этого файла. Это исправлено, чтобы выделение и IntelliSense сохранялись после переименования.

Известные проблемы с ASP.NET MVC 3 RTM

  • Если закрыть бета-версию Visual Studio 2010 с пакетом обновления 1 (SP1), пока открыта консоль диспетчера пакетов NuGet, Visual Studio завершит работу и попытается перезапуститься. Это будет исправлено в rtm-выпуске Visual Studio 2010 с пакетом обновления 1 (SP1).
  • Установщик ASP.NET MVC 3 может установить только начальную версию диспетчера пакетов NuGet. После установки начальной версии NuGet можно установить и обновить с помощью диспетчера расширений Visual Studio. Если у вас уже установлен NuGet, перейдите в коллекцию расширений Visual Studio, чтобы обновить NuGet до последней версии.
  • Создание нового проекта ASP.NET MVC 3 в папке решения приводит к ошибке NullReferenceException . Устранить эту проблему можно, создав проект ASP.NET MVC 3 в корневой папке решения и переместив его в папку решения.
  • Выполнение установщика может занять гораздо больше времени, чем предыдущие версии ASP.NET MVC. Это связано с тем, что он обновляет компоненты Visual Studio 2010.
  • Синтаксис IntelliSense и Razor не работает, если установлен ReSharper. Если у вас установлен ReSharper и вы хотите воспользоваться поддержкой Razor IntelliSense в ASP.NET MVC 3, см. запись Razor Intellisense и ReSharper в блоге Hadi Hariri, где обсуждаются способы их совместного использования сегодня.
  • В представлениях CCSHTML и VBHTML, созданных с помощью бета-версии ASP.NET MVC 3, действие сборки задано неправильно, в результате чего эти типы представлений опущены при публикации проекта. Для параметра Действие сборки для этих файлов должно быть задано значение "Содержимое". ASP.NET MVC 3 RTM устраняет эту проблему для новых файлов, но не исправляет параметр для существующих файлов для проекта, созданного с помощью предварительных версий.
  • Снимок экрана: диалоговое окно свойств с открытым меню действий сборки. Выбран параметр содержимого.
  • Во время установки условия лицензионного соглашения отображаются в меньшем окне, чем это требуется.
  • При редактировании представления Razor (CSHTML-файл) пункт меню Перейти к контроллеру в Visual Studio не будет доступен, и фрагменты кода отсутствуют.
  • Если вы установили ASP.NET MVC 3 для Visual Web Developer Express на компьютере, где visual Studio не установлена, а затем установите Visual Studio позже, необходимо переустановить ASP.NET MVC 3. Visual Studio и Visual Web Developer Express совместно используют компоненты, которые обновляются с помощью установщика MVC 3 ASP.NET. То же относится и к установке ASP.NET MVC 3 для Visual Studio на компьютере, на котором нет Visual Web Developer Express, и последующей установке Visual Web Developer Express.

Критические изменения в ASP.NET MVC 3

  • В предыдущих версиях ASP.NET MVC фильтры действий создаются для каждого запроса, за исключением нескольких случаев. Это поведение никогда не было гарантированным поведением, а лишь подробными сведениями о реализации, а контракт для фильтров заключался в том, чтобы считать их без отслеживания состояния. В ASP.NET MVC 3 фильтры кэшируются более интенсивно. Поэтому все настраиваемые фильтры действий, которые неправильно хранят состояние экземпляра, могут быть нарушены.
  • Порядок выполнения фильтров исключений изменился для фильтров исключений с одинаковым значением Order . В ASP.NET MVC 2 и более ранних версий фильтры исключений на контроллере, имеющие то же значение Order , что и в методе действия, выполняются перед фильтрами исключений в методе действия. Обычно это происходит, когда фильтры исключений применяются без указанного значения Order . В ASP.NET MVC 3 этот порядок был изменен на противоположный, чтобы наиболее конкретный обработчик исключений обрабатывался в первую очередь. Как и в предыдущих версиях, если явно указано свойство Order , фильтры выполняются в указанном порядке.
  • В базовый класс VirtualPathProviderViewEngine добавлено новое свойство с именем FileExtensions. Когда ASP.NET ищет представление по пути (а не по имени), учитываются только представления с расширением файла, содержащимся в списке, указанном этим новым свойством. Это критическое изменение в приложениях, где зарегистрирован пользовательский поставщик сборки, чтобы включить пользовательское расширение файла для представлений веб-формы и где поставщик ссылается на эти представления, используя полный путь, а не имя. Обходной путь — изменить значение свойства FileExtensions , чтобы включить расширение пользовательского файла.
  • Пользовательские реализации фабрики контроллеров, которые непосредственно реализуют интерфейс IControllerFactory , должны предоставлять реализацию нового метода GetControllerSessionBehavior , который был добавлен в интерфейс в этом выпуске. Как правило, рекомендуется не реализовывать этот интерфейс напрямую и вместо этого наследовать класс от DefaultControllerFactory.

Изменения в ASP.NET MVC 3 RC2

В этом разделе описываются изменения (новые функции и исправления ошибок), внесенные в выпуске ASP.NET MVC 3 RC2 с момента выпуска rc2.

Шаблоны проектов изменены на jQuery 1.4.4, jQuery Validation 1.7 и jQuery UI 1.8.6

Шаблоны проектов для ASP.NET MVC 3 теперь включают последние версии jQuery, jQuery Validation и jQuery UI. Пользовательский интерфейс jQuery является новым дополнением к шаблонам проектов и предоставляет полезные мини-приложения пользовательского интерфейса. Дополнительные сведения о пользовательском интерфейсе jQuery см. на домашней странице http://jqueryui.com/: .

Добавлен класс AdditionalMetadataAttribute

Класс AdditionalMetadataAttribute можно использовать для заполнения словаря ModelMetadata.AdditionalValues для свойства модели.

Например, предположим, что модель представления имеет свойства, которые должны отображаться только администратору. Эта модель может быть помечена новым атрибутом, используя AdminOnly в качестве ключа и true в качестве значения, как показано в следующем примере:

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

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

Улучшенное формирование шаблонов представлений

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

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

Шаблоны "Изменить" и "Создать" по умолчанию содержат ссылки на скрипты jQuery, необходимые для проверки клиента.

Добавлен метод Html.Raw

По умолчанию обработчик представлений Razor кодирует все значения в формате HTML. Например, следующий фрагмент кода кодирует HTML-код внутри переменной приветствия таким образом, чтобы он отображался на странице как <strong>Hello World!</strong>.

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@greeting</p>

Новый метод Html.Raw предоставляет простой способ отображения незакодированного HTML-кода, когда содержимое известно как безопасное. В следующем примере отображается та же строка, но она отображается как разметка:

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@Html.Raw(greeting)</p>

Свойство "Controller.ViewModel" переименовано в "ViewBag"

Ранее свойство ViewModelконтроллера соответствовало свойству View представления. Оба этих свойства предоставляют способ доступа к значениям объекта ViewDataDictionary с помощью динамического синтаксиса метода доступа свойств. Оба свойства были переименованы в одинаковые, чтобы избежать путаницы и быть более согласованными.

Класс ControllerSessionStateAttribute переименован в SessionStateAttribute.

Класс ControllerSessionStateAttribute был представлен в выпуске RC ASP.NET MVC 3. Свойство было переименовано, чтобы быть более кратким.

Свойство RemoteAttribute "Fields" переименовано в "AdditionalFields"

Свойство Fields класса RemoteAttribute вызвало некоторую путаницу среди пользователей. Переименование этого свойства в AdditionalFields проясняет его намерение.

Переименован в SkipRequestValidationAttribute в AllowHtmlAttribute.

Атрибут SkipRequestValidationAttribute был переименован в AllowHtmlAttribute , чтобы лучше представить его предполагаемое использование.

Изменен метод "Html.ValidationMessage" для отображения первого полезного сообщения об ошибке

Метод Html.ValidationMessage был исправлен для отображения первого полезного сообщения об ошибке вместо простого отображения первой ошибки.

Во время привязки модели словарь ModelState может быть заполнен из нескольких источников сообщениями об ошибках о свойстве, в том числе из самой модели (если она реализует IValidatableObject), из атрибутов проверки, примененных к свойству, и из исключений, создаваемых при доступе к свойству.

Когда метод Html.ValidationMessage отображает сообщение о проверке, он пропускает записи состояния модели, включающие исключение, так как они обычно не предназначены для конечного пользователя. Вместо этого метод ищет первое сообщение проверки, не связанное с исключением, и отображает это сообщение. Если такое сообщение не найдено, по умолчанию используется универсальное сообщение об ошибке, связанное с первым исключением.

Исправлено @model объявление, не добавляя пробелы в документ

В более ранних выпусках @model объявление в верхней части представления добавлял пустую строку в отображаемые выходные данные HTML. Это исправлено, чтобы объявление не вводило пробелы.

Добавлено свойство FileExtensions для представления обработчиков для поддержки имен файлов Engine-Specific.

Подсистема представлений может возвращать представление, используя явный путь представления, как показано в следующем примере:

return View("~/views/home/index.cshtml");

Первый обработчик представлений всегда пытается отобразить представление. По умолчанию подсистема представления веб-формы является первой подсистемой представлений. Так как подсистема веб-формы не может отрисовывать представление Razor, возникает ошибка. Обработчики представлений теперь имеют свойство FileExtensions , которое используется для указания расширений файлов, которые они поддерживают. Это свойство проверяется, когда ASP.NET определяет, может ли модуль представлений отрисовыть файл. Это критическое изменение, и дополнительные сведения см. в разделе Критические изменения этого документа.

Исправлена вспомогатель LabelFor для выдачи правильного значения для атрибута For.

Исправлена ошибка, из-за которой метод LabelFor отображал для атрибута , который соответствует атрибуту именивходного элемента, а не его идентификатору. Согласно W3C, атрибут for должен соответствовать идентификатору входного элемента.

Исправлен метод RenderAction для предоставления явного приоритета значений во время привязки модели

В более ранних версиях явные значения, переданные методу RenderAction , игнорирулись в пользу текущих значений формы во время привязки модели в дочернем действии. Исправление гарантирует, что явные значения имеют приоритет во время привязки модели.

Критические изменения в ASP.NET MVC 3 RC2

  • В предыдущих версиях ASP.NET MVC фильтры действий создавались для каждого запроса, за исключением нескольких случаев. Это поведение никогда не было гарантированным поведением, а лишь подробными сведениями о реализации, а контракт для фильтров заключался в том, чтобы считать их без отслеживания состояния. В ASP.NET MVC 3 фильтры кэшируются более интенсивно. Поэтому все настраиваемые фильтры действий, которые неправильно хранят состояние экземпляра, могут быть нарушены.
  • Порядок выполнения фильтров исключений изменился для фильтров исключений с одинаковым значением Order . В ASP.NET MVC 2 и более ранних версий фильтры исключений на контроллере с тем же значением Order , что и в методе действия, выполнялись до фильтрации исключений в методе действия. Обычно это происходит, когда фильтры исключений применялись без указанного значения Order . В ASP.NET MVC 3 этот порядок был изменен на противоположный, чтобы наиболее конкретный обработчик исключений обрабатывался в первую очередь. Как и в предыдущих версиях, если явно указано свойство Order , фильтры выполняются в указанном порядке.
  • В базовый класс VirtualPathProviderViewEngine добавлено новое свойство с именем FileExtensions. Когда ASP.NET ищет представление по пути (а не по имени), учитываются только представления с расширением файла, содержащимся в списке, указанном этим новым свойством. Это критическое изменение в приложениях, где зарегистрирован пользовательский поставщик сборки, чтобы включить пользовательское расширение файла для представлений веб-формы и где поставщик ссылается на эти представления, используя полный путь, а не имя. Обходной путь — изменить значение свойства FileExtensions , чтобы включить расширение пользовательского файла.
  • Пользовательские реализации фабрики контроллеров, которые непосредственно реализуют интерфейс IControllerFactory , должны предоставлять реализацию нового метода GetControllerSessionBehavior , который был добавлен в интерфейс в этом выпуске. Как правило, рекомендуется не реализовывать этот интерфейс напрямую и вместо этого наследовать класс от DefaultControllerFactory.

Известные проблемы в ASP.NET MVC 3 RC2

  • Установщик ASP.NET MVC 3 может установить только начальную версию диспетчера пакетов NuGet. После установки начальной версии NuGet можно установить и обновить с помощью диспетчера расширений Visual Studio. Если у вас уже установлен NuGet, перейдите в коллекцию расширений Visual Studio, чтобы обновить NuGet до последней версии.
  • Создание нового проекта ASP.NET MVC 3 в папке решения приводит к ошибке NullReferenceException . Устранить эту проблему можно, создав проект ASP.NET MVC 3 в корневой папке решения и переместив его в папку решения.
  • Выполнение установщика может занять гораздо больше времени, чем предыдущие версии ASP.NET MVC. Это связано с тем, что он обновляет компоненты Visual Studio 2010.
  • Синтаксис IntelliSense и Razor не работает, если установлен ReSharper. Если вы установили ReSharper и хотите воспользоваться поддержкой Razor IntelliSense в ASP.NET MVC 3 RC2, ознакомьтесь с записью Razor Intellisense и ReSharper в блоге Hadi Hariri, где обсуждаются способы их совместного использования сегодня.
  • В представлениях CSHTML и VBHTML, созданных с помощью бета-версии ASP.NET MVC 3, действие сборки задано неправильно, в результате чего эти типы представлений опущены при публикации проекта. Для параметра Действие сборки для этих файлов должно быть задано значение Содержимое". ASP.NET MVC 3 RC2 устраняет эту проблему для новых файлов, но не исправляет параметр для существующих файлов для проекта, созданного с помощью бета-версии. Снимок экрана: диалоговое окно свойств. Откроется меню действий сборки и выбран параметр содержимого.
  • Во время установки условия лицензионного соглашения отображаются в меньшем окне, чем это требуется.
  • При редактировании представления Razor (CSHTML-файл) пункт меню Перейти к контроллеру в Visual Studio не будет доступен, и фрагменты кода отсутствуют.
  • Если вы установили ASP.NET MVC 3 для Visual Web Developer Express на компьютере, где visual Studio не установлена, а затем установите Visual Studio позже, необходимо переустановить ASP.NET MVC 3. Visual Studio и Visual Web Developer Express совместно используют компоненты, которые обновляются с помощью установщика MVC 3 ASP.NET. То же относится и к установке ASP.NET MVC 3 для Visual Studio на компьютере, на котором нет Visual Web Developer Express, и последующей установке Visual Web Developer Express.
  • Установка ASP.NET MVC 3 RC 2 не обновляет NuGet, если он уже установлен. Чтобы обновить NuGet, перейдите в диспетчер расширений Visual Studio, который должен отображаться как доступное обновление. Вы можете обновить NuGet до последнего выпуска.

ASP.NET релиз-кандидат MVC 3

ASP.NET релиз-кандидат MVC был выпущен 9 ноября 2010 года.

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

В этом разделе описываются функции, появившиеся в версии-кандидате ASP.NET MVC 3 с момента выпуска бета-версии.

Диспетчер пакетов NuGet

ASP.NET MVC 3 включает диспетчер пакетов NuGet (прежнее название — NuPack), который представляет собой интегрированное средство управления пакетами для добавления библиотек и инструментов в проекты Visual Studio. Это средство автоматизирует шаги, которые разработчики выполняют сегодня, чтобы получить библиотеку в исходном дереве.

NuGet можно использовать как программу командной строки, как интегрированное окно консоли в Visual Studio 2010, из контекстного меню Visual Studio и как набор командлетов PowerShell.

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

Улучшено диалоговое окно "Новый проект"

При создании проекта диалоговое окно Новый проект теперь позволяет указать подсистему представлений, а также ASP.NET тип проекта MVC.

Снимок экрана: диалоговое окно создания проекта. Открыто меню обработчика представлений и выбрано razor.

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

По умолчанию используются следующие шаблоны:

Пустой. Содержит минимальный набор файлов для проекта MVC ASP.NET, включая структуру каталогов по умолчанию для ASP.NET проектов MVC, файл Site.css, содержащий стандартные стили ASP.NET MVC, и каталог Scripts, содержащий файлы JavaScript по умолчанию.

Интернет-приложение. Содержит пример функциональных возможностей, демонстрирующих использование поставщика членства с ASP.NET MVC.

Список шаблонов проектов, отображаемых в диалоговом окне, указывается в реестре Windows.

Контроллеры без сеанса

Новый ControllerSessionStateAttribute позволяет управлять поведением состояния сеанса для контроллеров, указав значение перечисления System.Web.SessionState.SessionStateBehavior .

В следующем примере показано, как отключить состояние сеанса для всех запросов к контроллеру.

[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
    public ActionResult Index() {
        object o = Session["Key"]; // Causes an exception.

    }
}

В следующем примере показано, как задать состояние сеанса только для чтения для всех запросов к контроллеру.

[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
    public ActionResult Index() {
    Session["Key"] = "value"; // Value is not available in
    the next request
    }
}

Новые атрибуты проверки

CompareAttribute

Новый атрибут проверки CompareAttribute позволяет сравнивать значения двух различных свойств модели. В следующем примере свойство ComparePassword должно соответствовать полю Пароль , чтобы быть допустимым.

public class User {
    [Required]

    public string Password { get; set; }
    [Required, Compare("Password")]
    public string ComparePassword { get; set; }
}

RemoteAttribute

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

В следующем примере к свойству UserName применен элемент RemoteAttribute . При изменении этого свойства в представлении Правка проверка клиента вызывает действие с именем UserNameAvailable в классе UsersController , чтобы проверить это поле.

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";
    }
}

По умолчанию имя свойства, к которому применяется атрибут, отправляется в метод действия в качестве параметра строки запроса.

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

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

@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");

Кэширование выходных данных дочернего действия

OutputCacheAttribute поддерживает кэширование выходных данных дочерних действий, которые вызываются с помощью вспомогательных методов Html.RenderAction или Html.Action. В следующем примере показано представление, которое вызывает другое действие.

Hi there. The uncached time is:
@DateTime.Now
The cached time is: @Html.Action("GetDate")

Действие GetDate аннотируется с помощью OutputCacheAttribute:

[OutputCache(Duration = 100,
VaryByParam = "none")]
public string GetDate() {
    return DateTime.Now.ToString();
}

При выполнении этого кода результат вызова Html.Action("GetDate") кэшируется в течение 100 секунд.

Улучшения диалогового окна "Добавление представления"

При добавлении строго типизированного представления диалоговое окно Добавление представления теперь отфильтровывает больше неприменимых типов, чем в предыдущих выпусках, например многие основные типы платформа .NET Framework. Кроме того, список теперь сортируется по имени класса, а не по полному имени типа, что упрощает поиск типов. Например, имя типа теперь отображается так, как показано в следующем примере:

ClassName (пространство имен)

В более ранних выпусках это отображалось следующим образом:

Namespace.ClassName

Детальная проверка запроса

Свойство Excludeобъекта ValidateInputAttribute больше не существует. Вместо этого, чтобы пропустить проверку запросов для определенных свойств модели во время привязки модели, используйте новый Атрибут SkipRequestValidationAttribute.

Например, предположим, что для изменения записи блога используется метод действия:

[HttpPost]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

В следующем примере показана модель представления для записи блога.

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    public string Description {get; set;}
}

Когда пользователь отправляет разметку для свойства Description, привязка модели завершится сбоем из-за проверки запроса. Чтобы отключить проверку запроса во время привязки модели для записи блога Description, примените skipRequpestValidationAttribute к свойству , как показано в следующем примере: .

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

Кроме того, чтобы отключить проверку запросов для каждого свойства модели, примените ValidateInputAttribute со значением false к методу действия:

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

Критические изменения в ASP.NET версии-кандидате MVC 3

  • Порядок выполнения фильтров исключений изменился для фильтров исключений с одинаковым значением Order . В ASP.NET MVC 2 и более ранних версий фильтры исключений на контроллере с тем же порядком , что и в методе действия, выполнялись до фильтрации исключений в методе действия. Обычно это происходит, когда фильтры исключений применяются без указанного значения Order . В ASP.NET MVC 3 этот порядок был изменен на противоположный, чтобы наиболее конкретный обработчик исключений обрабатывался в первую очередь. Как и в более ранних версиях, если явно указано свойство Order , фильтры выполняются в указанном порядке.
  • Добавлено новое свойство FileExtensions для базового класса VirtualPathProviderViewEngine . При поиске представления по пути (а не по имени) учитываются только представления с расширением файла, содержащиеся в списке, указанном этим новым свойством. Это критическое изменение для тех, кто регистрирует пользовательский поставщик сборки, чтобы включить пользовательское расширение файла для представлений веб-форм и ссылается на эти представления, используя полный путь, а не имя. Обходной путь — изменить значение свойства FileExtensions , чтобы включить расширение пользовательского файла.

Известные проблемы в ASP.NET версии-кандидате MVC 3

  • Выполнение установщика может занять гораздо больше времени, чем в предыдущих версиях ASP.NET MVC, так как он обновляет компоненты Visual Studio 2010.
  • Добавление шаблонов представлений при выборе шаблонов с типизированным представлением, доступных только для записи. Их всегда следует игнорировать при формировании шаблонов. Диалоговое окно Добавление представления также создает шаблон свойств, доступных только для чтения, при создании представления "Изменить" или "Создать". Свойства, доступные только для чтения, должны быть сформированы только для представлений Display и List.
  • Отладка не работает, если ASP.NET MVC 3 устанавливается вместе с Асинхронным CTP. ASP.NET MVC 3 нельзя установить параллельно с Асинхронным CTP. Удалите Async CTP для восстановления отладки. Дополнительные сведения см. в этой записи блога об удалении всех компонентов ASP.NET MVC 3 RC.
  • Razor Intellisense не работает при установке Resharper. Если у вас установлен ReSharper и вы хотите воспользоваться поддержкой Razor Intellisense в ASP.NET MVC 3 RC, прочитайте эту запись блога от JetBrains, в которой обсуждаются способы их совместного использования сегодня.
  • Представления CSHTML и VBHTML, созданные с помощью бета-версии ASP.NET MVC 3, не имеют правильного действия сборки, что исключает их из публикации. Действие сборки для этих файлов должно иметь значение "Содержимое". ASP.NET версии-кандидат MVC 3 устраняет эту проблему для новых файлов, но не исправляет параметры для существующих файлов для проекта, созданного с помощью бета-версии.
  • Выполнение установщика может занять гораздо больше времени, чем в предыдущих версиях ASP.NET MVC, так как он обновляет компоненты Visual Studio 2010.
  • Добавление шаблонов представления при выборе строго типизированного представления шаблонов для чтения только для чтения. Аналогичным образом для представлений Display создаются свойства, доступные только для записи.
  • Во время установки условия лицензионного соглашения отображаются в меньшем окне, чем это требуется.
  • Установка visual Studio Async CTP вызывает конфликт с выпуском Razor, который входит в состав установки средств ASP.NET MVC 3. Убедитесь, что вы не пытаетесь установить одновременно Асинхронный CTP-пакет Visual Studio и выпуск Razor на одном компьютере.
  • При редактировании представления Razor (CSHTML-файл) пункт меню Перейти к контроллеру в Visual Studio будет недоступен, и фрагменты кода отсутствуют.

бета-версия ASP.NET MVC 3

бета-версия ASP.NET MVC 3 была выпущена 6 октября 2010 года. Следующие примечания относятся к бета-версии и подлежат любым обновлениям или изменениям, указанным в разделе ASP.NET MVC 3 Release Candidate выше.

Новые возможностив бета-версия ASP.NET MVC 3

В этом разделе описываются функции, представленные в бета-версии ASP.NET MVC 3.

Диспетчер пакетов NuGet

ASP.NET MVC 3 включает диспетчер пакетов NuGet, который представляет собой интегрированное средство управления пакетами для добавления библиотек и инструментов в проекты Visual Studio. По большей части он автоматизирует шаги, которые разработчики выполняют сегодня, чтобы получить библиотеку в исходном дереве.

Вы можете работать с NuGet в качестве программы командной строки, как интегрированное окно консоли в Visual Studio 2010, из контекстного меню Visual Studio и как набор командлетов PowerShell.

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

Улучшенное диалоговое окно создания проекта

При создании проекта диалоговое окно Новый проект теперь позволяет указать подсистему представлений, а также тип проекта ASP.NET MVC.

Снимок экрана: диалоговое окно нового проекта. Razor выбирается в меню обработчика представлений.

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

По умолчанию используются следующие шаблоны:

Пустой. Содержит минимальный набор файлов для проекта ASP.NET MVC, включая структуру каталогов по умолчанию для ASP.NET проектов MVC, небольшой файл Site.css, содержащий стили MVC по умолчанию ASP.NET, и каталог Scripts, содержащий файлы JavaScript по умолчанию.

Интернет-приложение. Содержит пример функциональных возможностей, демонстрирующий использование поставщика членства в ASP.NET MVC.

Упрощенный способ указания строго типизированных моделей в представлениях Razor

Способ указания типа модели для строго типизированных представлений Razor был упрощен с помощью новой @model директивы для представлений CSHTML и @ModelType директивы для представлений VBHTML. В более ранних версиях ASP.NET MVC строго типизированная модель для представлений Razor указывалась следующим образом:

@inherits System.Web.Mvc.WebViewPage

В этом выпуске можно использовать следующий синтаксис:

@model MyModelNamespace.MyModelType

Поддержка новых вспомогательных методов веб-страницы ASP.NET

Новая технология веб-страницы ASP.NET включает набор вспомогательных методов, которые полезны для добавления часто используемых функциональных возможностей в представления и контроллеры. ASP.NET MVC 3 поддерживает использование этих вспомогательных методов в контроллерах и представлениях (при необходимости). Эти методы содержатся в сборке System.Web.Helpers. В следующей таблице перечислены некоторые из веб-страницы ASP.NET вспомогательных методов.

Вспомогательные Описание
Диаграмма Отрисовывает диаграмму в представлении. Содержит такие методы, как Chart.ToWebImage, Chart.Save и Chart.Write.
Крипто Использует алгоритмы хэширования для создания правильно соленых и хэшированных паролей.
Webgrid Отрисовывает коллекцию объектов (обычно данных из базы данных) в виде сетки. Поддерживает разбиение по страницам и сортировку.
WebImage Отрисовывает изображение.
Webmail Отправляет сообщение электронной почты.

Краткий справочный раздел со списком вспомогательных и базовых синтаксисов доступен в ASP.NET документации по синтаксису Razor по следующему URL-адресу:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference

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

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

Новый интерфейс IControllerActivator для создания экземпляра контроллера Fine-Grained

Новый интерфейс IControllerActivator обеспечивает более точное управление тем, как создаются экземпляры контроллеров с помощью внедрения зависимостей. В следующем примере показан интерфейс :

namespace System.Web.Mvc {
    using System.Web.Routing;

    public interface IControllerActivator {
        IController Create(RequestContext requestContext, Type controllerType);
    }
}

Сравните это с ролью фабрики контроллеров. Фабрика контроллеров — это реализация интерфейса IControllerFactory, который отвечает как за поиск типа контроллера, так и за создание экземпляра этого типа контроллера.

Активаторы контроллера отвечают только за создание экземпляра типа контроллера. Они не выполняют подстановку типа контроллера. После определения правильного типа контроллера фабрики контроллеров должны делегировать экземпляру IControllerActivator для обработки фактического экземпляра контроллера.

Класс DefaultControllerFactory имеет новый конструктор, который принимает экземпляр IControllerFactory. Это позволяет применять внедрение зависимостей для управления этим аспектом создания контроллера без переопределения поведения подстановки типа контроллера по умолчанию.

Интерфейс IServiceLocator заменен на IDependencyResolver

На основе отзывов сообщества бета-версия ASP.NET MVC 3 заменила использование интерфейса IServiceLocator более тонким интерфейсом IDependencyResolver, соответствующим потребностям ASP.NET MVC. В следующем примере показан новый интерфейс:

namespace System.Web.Mvc {
    using System.Collections.Generic;

    public interface IDependencyResolver {
        object GetService(Type serviceType);
        IEnumerable<object> GetServices(Type serviceType);
    }
}

В рамках этого изменения класс ServiceLocator также был заменен классом DependencyResolver. Регистрация сопоставителя зависимостей аналогична более ранним версиям ASP.NET MVC:

DependencyResolver.SetResolver(myResolver);

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

Если зарегистрированных служб запрошенного типа нет, ASP.NET MVC ожидает, что реализации этого интерфейса будут возвращать значение NULL из GetService и возвращать пустую коллекцию из GetServices.

Новый класс DependencyResolver позволяет регистрировать классы, реализующие новый интерфейс IDependencyResolver или интерфейс Указателя Common Service (IServiceLocator). Дополнительные сведения о указателе Common Service см. в статье CommonServiceLocator на сайте GitHub.

Новый интерфейс IViewActivator для создания экземпляра страницы представления Fine-Grained

Новый интерфейс IViewPageActivator обеспечивает более точное управление тем, как создаются экземпляры страниц представления с помощью внедрения зависимостей. Это относится как к экземплярам WebFormView, так и к экземплярам RazorView. В следующем примере показан новый интерфейс:

namespace System.Web.Mvc {
    public interface IViewPageActivator {
        object Create(ControllerContext controllerContext, Type type);
    }
}

Теперь эти классы принимают аргумент конструктора IViewPageActivator, который позволяет использовать внедрение зависимостей для управления тем, как создаются экземпляры типов ViewPage, ViewUserControl и WebViewPage.

Поддержка нового сопоставителя зависимостей для существующих служб

Новый выпуск включает поддержку разрешения зависимостей для следующих служб:

  • Поставщики проверки модели. Классы, реализующие ModelValidatorProvider, можно зарегистрировать в сопоставителе зависимостей, и система будет использовать их для поддержки проверки на стороне клиента и сервера.
  • Поставщик метаданных модели. Один класс, реализующий ModelMetadataProvider, можно зарегистрировать в сопоставителе зависимостей, и система будет использовать его для предоставления метаданных для систем шаблонов и проверки.
  • Поставщики значений. Классы, реализующие ValueProviderFactory, можно зарегистрировать в сопоставитель зависимостей, и система будет использовать их для создания поставщиков значений, используемых контроллером и во время привязки модели.
  • Связыватели моделей. Классы, реализующие IModelBinderProvider, можно зарегистрировать в сопоставителе зависимостей, и система будет использовать их для создания связывателей модели, используемых системой привязки модели.

Новая поддержка ненавязчивого Ajax на основе jQuery

ASP.NET MVC включает вспомогательные методы Ajax, такие как:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

Эти методы используют JavaScript для вызова метода действия на сервере, а не полной обратной передачи. Эта функция была обновлена, чтобы использовать преимущества jQuery в ненавязчивой манере. Вместо того чтобы интрузивно выдавать встроенные клиентские скрипты, эти вспомогательные методы отделяют поведение от разметки, создавая атрибуты HTML5 с помощью префикса data-ajax . Затем поведение применяется к разметке путем ссылки на соответствующие файлы JavaScript. Убедитесь, что имеются ссылки на следующие файлы JavaScript:

  • jquery-1.4.1.js
  • jquery.unobtrusive.ajax.js

Эта функция включена по умолчанию в файле Web.config в новых шаблонах проектов ASP.NET MVC 3, но по умолчанию отключена для существующих проектов. Дополнительные сведения см. в разделе Добавление флагов на уровне приложения для проверки клиента и ненавязчивого JavaScript далее в этом документе.

Новая поддержка ненавязчивой проверки jQuery

По умолчанию ASP.NET MVC 3 Beta использует проверку jQuery для выполнения проверки на стороне клиента. Чтобы включить ненавязчивую проверку клиента, выполните следующий вызов из представления:

Html.EnableClientValidation();

Для этого требуется, чтобы для свойства ViewContext.UnobtrusiveJavaScriptEnabled задано значение true, что можно сделать, выполнив следующий вызов:

Html.EnableUnobtrusiveJavaScript();

Кроме того, убедитесь, что имеются ссылки на следующие файлы JavaScript.

  • jquery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js

Эта функция включена по умолчанию в файле Web.config в ASP.NET новых шаблонов проектов MVC 3, но по умолчанию отключена для существующих проектов. Дополнительные сведения см. в разделе Новые флаги на уровне приложения для проверки клиента и ненавязчивый Код JavaScript далее в этом документе.

Новые флаги Application-Wide для проверки клиента и ненавязчивого JavaScript

Вы можете включить или отключить проверку клиента и ненавязчивый JavaScript глобально, используя статические члены класса HtmlHelper, как показано в следующем примере:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

Шаблоны проектов по умолчанию поддерживают ненавязчивый Код JavaScript по умолчанию. Вы также можете включить или отключить эти функции в корневом файле Web.config приложения, используя следующие параметры:

<configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="true"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
        </appSettings>
    </configuration>

Так как эти функции можно включить по умолчанию, в класс HtmlHelper появились новые перегрузки, позволяющие переопределить параметры по умолчанию, как показано в следующих примерах:

public void EnableClientValidation();
public void EnableClientValidation(bool enabled);
public void EnableUnobtrusiveJavaScript();
public void EnableUnobtrusiveJavaScript(bool enabled);

Для обеспечения обратной совместимости обе эти функции отключены по умолчанию.

Новая поддержка кода, который выполняется до выполнения представлений

Теперь вы можете поместить файл с именем _viewstart.cshtml (или _viewstart.vbhtml) в каталог Views и добавить в него код, который будет совместно использоваться несколькими представлениями в этом каталоге и его подкаталогах. Например, можно поместить следующий код на страницу _viewstart.cshtml в папке ~/Views:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Это рекурсивно задает страницу макета для каждого представления в папке Views и всех ее вложенных папок. При отрисовке представления код в файле _viewstart.cshtml выполняется перед выполнением кода представления. Код _viewstart.cshtml применяется ко всем представлениям в этой папке.

По умолчанию код в файле _viewstart.cshtml также применяется к представлениям в любой вложенной папке. Однако отдельные вложенные папки могут иметь собственную версию файла _viewstart.cshtml; в этом случае приоритет имеет локальная версия. Например, чтобы выполнить код, общий для всех представлений HomeController, поместите файл _viewstart.cshtml в папку ~/Views/Home.

Новая поддержка синтаксиса Razor для VBHTML

Предыдущая предварительная версия ASP.NET MVC включала поддержку представлений с использованием синтаксиса Razor на основе C#. В этих представлениях используется расширение ФАЙЛА CSHTML. В рамках текущей работы по поддержке Razor в бета-версии ASP.NET MVC 3 реализована поддержка синтаксиса Razor в Visual Basic, использующего расширение файла VBHTML.

Общие сведения об использовании синтаксиса Visual Basic на страницах VBHTML см. в руководстве по следующему URL-адресу:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic

Более детализированный контроль над ValidateInputAttribute

ASP.NET MVC всегда включал класс ValidateInputAttribute, который вызывает базовую инфраструктуру проверки ASP.NET запросов, чтобы убедиться, что входящий запрос не содержит потенциально вредоносных входных данных. По умолчанию проверка входных данных включена. Проверку запроса можно отключить с помощью атрибута ValidateInputAttribute, как показано в следующем примере:

[ValidateInput(false)]
public ActionResult SomeAction() {
    return View();
}

Однако во многих веб-приложениях есть отдельные поля форм, которые должны разрешать HTML, а остальные — нет. Класс ValidateInputAttribute теперь позволяет указать список полей, которые не следует включать в проверку запроса.

Например, если вы разрабатываете модуль блога, может потребоваться разрешить разметку в полях Текст и Сводка. Эти поля могут быть представлены двумя входными элементами, каждый из которых имеет атрибут name, соответствующий имени свойства ("Body" и "Summary"). Чтобы отключить проверку запросов только для этих полей, укажите имена (разделенные запятыми) в свойстве Exclude класса ValidateInput, как показано в следующем примере:

[ValidateInput(true, Exclude="Body, Summary")]
public ActionResult About() {
    return View();
}

Вспомогательные функции преобразуют символы подчеркивания в дефисы для имен атрибутов HTML, указанных с помощью анонимных объектов

Вспомогательные методы позволяют указывать пары "имя-значение" атрибута с помощью анонимного объекта, как показано в следующем примере:

Html.TextBox("Name", "Value", new {title = "Title"})

Этот подход не позволяет использовать дефисы в имени атрибута, так как дефис нельзя использовать для имени свойства в ASP.NET. Однако дефисы важны для пользовательских атрибутов HTML5; например, HTML5 использует префикс "data-".

В то же время символы подчеркивания нельзя использовать для имен атрибутов в HTML, но они допустимы в именах свойств. Таким образом, если атрибуты указываются с помощью анонимного объекта, а имена атрибутов содержат символ подчеркивания, вспомогательные методы преобразуют символы подчеркивания в дефисы. Например, в следующем вспомогательном синтаксисе используется символ подчеркивания:

Html.TextBox("Name", "Value", new {data_required = "true"})

В предыдущем примере отображается следующая разметка при запуске вспомогательного средства:

<input data-required="true" id="Name" name="Name"
       type="textbox" value="Value" />

Исправления ошибок

Шаблон объекта по умолчанию для вспомогательных шаблонов EditorFor и DisplayFor теперь поддерживает порядок, указанный в свойстве DisplayAttribute.Order. (В предыдущих версиях параметр Order не использовался.)

Проверка клиента теперь поддерживает проверку переопределенных свойств, к которым применены атрибуты проверки.

JsonValueProviderFactory теперь зарегистрирован по умолчанию.

Критические изменения

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

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

Во время установки условия лицензионного соглашения отображаются в меньшем окне, чем это требуется.

Представления Razor не поддерживают IntelliSense и не выделяют синтаксис. Ожидается, что поддержка синтаксиса Razor в Visual Studio будет включена в более поздний выпуск.

При редактировании представления Razor (CSHTML-файл) пункт меню Перейти к контроллеру в Visual Studio будет недоступен, и фрагменты кода отсутствуют.

При использовании синтаксиса @model для указания строго типизированного представления CSHTML сочетания клавиш для типов для конкретного языка не распознаются. Например, @model int не будет работать, но @model int32 будет работать. Обходной путь для этой ошибки — использовать фактическое имя типа при указании типа модели.

При использовании синтаксиса @model для указания строго типизированного представления CSHTML (или @ModelType для указания строго типизированного представления VBHTML) типы и объявления массивов, допускающих значение NULL, не поддерживаются. Например, @model int? не поддерживается. Вместо этого используйте @model Nullable<Int32>. Синтаксис @model string[] также не поддерживается; вместо этого используйте @model IList<string>.

При обновлении проекта ASP.NET MVC 2 до ASP.NET MVC 3 добавьте в раздел appSettings файла Web.config следующее:

<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>

Существует известная проблема, которая приводит к тому, что проверка подлинности с помощью форм всегда перенаправляет непроверенных пользователей в ~/Account/Login, игнорируя параметр проверки подлинности с помощью форм, используемый в Web.config. Обходной путь заключается в добавлении следующего параметра приложения.

<add key="autoFormsAuthentication" value="false" />

Отказ от ответственности

© Корпорация Майкрософт (Microsoft Corporation), 2011 Все права защищены. Этот документ предоставляется "как есть". Информация и мнения, выраженные в этом документе, включая URL-адреса и другие ссылки на веб-сайты Интернета, могут изменяться без предварительного уведомления. Вы принимаете на себя весь риск, связанный с его использованием.

Этот документ не предоставляет вам каких-либо юридических прав интеллектуальной собственности на какие-либо продукты Майкрософт. Вы можете копировать и использовать настоящий документ для внутреннего использования и в справочных целях.