заметки о выпуске MVC 3 ASP.NET
Обновление проекта ASP.NET MVC 2 до ASP.NET обновления средств MVC 3
ASP.NET обновление средств MVC 3 (12 апреля 2011 г.)
- Диалоговое окно "Добавление контроллера" теперь может содержать контроллеры шаблонов с помощью представлений и кода доступа к данным
- Улучшения диалогового окна "ASP.NET MVC 3 Новый проект"
- Теперь шаблоны проектов включают модернизатор 1.7
- Шаблоны проектов включают обновленные версии jQuery, пользовательского интерфейса jQuery и jQuery Validation
- Шаблоны проектов теперь включают ADO.NET Entity Framework 4.1 в качестве предварительно установленного пакета NuGet
- Шаблоны проектов включают библиотеки JavaScript в качестве предварительно установленных пакетов NuGet
- Известные проблемы
ASP.NET MVC 3 RTM (13 января 2011 г.)
- Изменение: обновлена версия пользовательского интерфейса jQuery до версии 1.8.7
- Изменение. Изменено значение ModelMetadataProvider обратно на DataAnnotationsModelMetadataProvider
- Исправлено. Вставка части выражения Razor, содержащего пробелы, приводит к обратному переключение
- Исправлено. Переименование файла Razor, открываемого в редакторе, отключает цветовую фильтрацию синтаксиса и IntelliSense
- Известные проблемы
- Критические изменения
ASP.NET MVC 3 выпуск кандидат 2 (10 декабря 2010 г.)
- Шаблоны проектов изменены на включение jQuery 1.4.4, jQuery Validation 1.7 и jQuery UI 1.8.6y UI 1.8.6y
- Добавлен класс AdditionalMetadataAttribute
- Улучшенная настройка шаблонов представления
- Добавлен метод Html.Raw
- Переименовано свойство Controller.ViewModel и свойство View в ViewBag
- Переименован класс ControllerSessionStateAttribute в SessionStateAttribute.
- Переименовано свойство RemoteAttribute "Fields" в "AdditionalFields"
- Переименовано в SkipRequestValidationAttribute в AllowHtmlAttribute.
- Изменен метод Html.ValidationMessage, чтобы отобразить первое полезное сообщение об ошибке
- Fixed @model Declaration to not Add Whitespace to the Document
- Добавлено свойство FileExtensions для просмотра обработчиков для поддержки имен файлов, относящихся к обработчику.
- Исправлена вспомогателя LabelFor, чтобы вывести правильное значение атрибута "For"
- Исправлен метод RenderAction для предоставления явного приоритета значений во время привязки модели
- Критические изменения
- Известные проблемы
ASP.NET кандидат на выпуск MVC 3 (9 ноября 2010 г.)
- Новые возможности в ASP.NET RC-кандидате MVC 3
- диспетчер пакетов NuGet;
- Диалоговое окно "Новый проект"
- Контроллеры без сеансов
- Новые атрибуты проверки
- Новые перегрузки для методов LabelFor и LabelForModel
- Кэширование выходных данных дочернего действия
- Улучшения диалогового окна "Добавление представления"
- Детализация проверки запроса
- Критические изменения
- Известные проблемы
ГАДЮКА. Заметки о бета-версии MVC 3 (6 октября 2010 г.)
- Новые возможности в бета-версии MVC 3 ASP.NET
- NuPack диспетчер пакетов
- Диалоговое окно "Улучшенный новый проект"
- Упрощенный способ указания строго типизированных моделей в представлениях Razor
- Поддержка новых вспомогательных методов веб-страницы ASP.NET
- Дополнительная поддержка внедрения зависимостей
- Новая поддержка ненавязчивого jQuery На основе Ajax
- Новая поддержка ненавязчивой проверки jQuery
- Новые флаги на уровне приложений для проверки клиента и ненавязчивого JavaScript
- Новая поддержка кода, запущенного перед запуском представлений
- Новая поддержка синтаксиса Razor VBHTML
- Более детализированный контроль над ValidateInputAttribute
- Вспомогательные функции преобразуют символы подчеркивания в дефисы для имен атрибутов HTML, указанных с помощью анонимных объектов
- Исправления ошибок
- Критические изменения
- Известные проблемы
Обзор
В этом документе описывается выпуск ASP.NET MVC 3 RTM для Visual Studio 2010. ASP.NET MVC — это платформа для разработки веб-приложений, использующих шаблон Model-View-Controller (MVC). Установщик ASP.NET MVC 3 включает следующие компоненты:
- ASP.NET компоненты среды выполнения MVC 3
- ASP.NET средства MVC 3 Visual Studio 2010
- веб-страницы ASP.NET компоненты времени выполнения
- средства Visual Studio 2010 веб-страницы ASP.NET
- Microsoft диспетчер пакетов для .NET (NuGet)
- Обновление для Visual Studio 2010, которое обеспечивает поддержку синтаксиса Razor. (Дополнительные сведения см. в статье базы знаний 2483190.)
Полный набор заметок о выпуске для каждой предварительной версии ASP.NET MVC 3 можно найти на веб-сайте ASP.NET по следующему URL-адресу:
https://www.asp.net/learn/whitepapers/mvc3-release-notes
Installation Notes (Примечание по поддержке SAP № 1984787. Замечания по установке SUSE Linux Enterprise Server 12)
Чтобы установить 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-адресу:
Поддержка
Это полностью поддерживаемый выпуск. Сведения о получении технической поддержки можно найти на веб-сайте служба поддержки Майкрософт.
Кроме того, вы можете публиковать вопросы об этом выпуске на форуме 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 на том же компьютере, что обеспечивает гибкость при обновлении приложения MVC 2 ASP.NET MVC 2 до ASP.NET MVC 3.
Чтобы вручную обновить существующее приложение ASP.NET MVC 2 до версии 3, выполните следующие действия.
Создайте пустой проект ASP.NET MVC 3 на компьютере. Этот проект будет содержать некоторые файлы, необходимые для обновления.
Скопируйте следующие файлы из проекта ASP.NET MVC 3 в соответствующее расположение проекта ASP.NET MVC 2. Вам потребуется обновить все ссылки на библиотеку jQuery, чтобы учесть новое имя файла (jQuery-1.5.1.js):
- /Views/Web.config
- /packages.config
- /scripts/*.js
- /Content/темы/*.*
Скопируйте папку пакетов в корне пустого решения проекта ASP.NET MVC 3 в корневой каталог решения, который находится в каталоге, где находится .sln файл решения.
Если проект ASP.NET MVC 2 содержит все области, скопируйте файл /Views/Web.config в папку Views для каждой области.
В обоих файлах web.config в проекте MVC 2 ASP.NET глобально выполните поиск и замените версию MVC ASP.NET. Найдите следующее:
System.Web.Mvc, Version=2.0.0.0
Замените его следующим кодом:
System.Web.Mvc, Version=3.0.0.0
В Обозреватель решений удалите ссылку на System.Web.Mvc (которая указывает на библиотеку DLL версии 2), а затем добавьте ссылку на System.Web.Mvc (версии 3.0.0.0.0).
Добавьте ссылку на System.Web.WebPages.dll и System.Web.Helpers.dll. Эти сборки находятся в следующих папках:
- %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Сборки
- %ProgramFiles%\ Microsoft ASP.NET\веб-страницы ASP.NET\v1.0\Сборки
В Обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите "Выгрузить проект". Затем снова щелкните правой кнопкой мыши имя проекта и выберите Edit ProjectName.csproj.
Найдите элемент ProjectTypeGuids и замените {F85E285D-A4E0-4152-9332-AB1D724D3325} на {E53F8FEA-EAE0-44A6-8774-FFD645390401}.
Сохраните изменения, щелкните проект правой кнопкой мыши и выберите команду "Перезагрузить проект".
В корневом файле конфигурации 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" />
Если проект ссылается на любые сторонние библиотеки, скомпилированные с помощью 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>
Изменения в обновлении средств MVC 3 ASP.NET
В этом разделе описываются изменения, внесенные в выпуск обновления средств MVC 3 ASP.NET с момента выпуска ASP.NET MVC 3 RTM.
Диалоговое окно "Добавление контроллера" теперь может содержать контроллеры шаблонов с помощью представлений и кода доступа к данным
Шаблон — это способ быстрого создания контроллера и представлений для приложения. После создания кода его можно изменить в соответствии с требованиями проекта.
Чтобы запустить диалоговое окно "Добавить контроллер" в ASP.NET MVC 3, щелкните правой кнопкой мыши папку "Контроллеры" в Обозреватель решений, нажмите кнопку "Добавить" и нажмите кнопку "Контроллер". Диалоговое окно улучшено для предоставления дополнительных параметров формирования шаблонов.
По умолчанию доступны три шаблона шаблонов.
Пустой контроллер
Этот шаблон создает пустой файл контроллера. Этот шаблон эквивалентен не проверке действий добавления для создания, редактирования, сведений, удаления сценариев в предыдущих версиях ASP.NET MVC. Если вы выберете это, дополнительные параметры недоступны.
Контроллер с пустыми действиями чтения и записи
Этот шаблон создает файл контроллера, имеющий все необходимые методы действий, но не код реализации в методах. Этот шаблон эквивалентен проверке действий добавления действий для создания, редактирования, сведений, удаления сценариев в предыдущих версиях ASP.NET MVC. Если вы выберете это, дополнительные параметры недоступны.
Контроллер с действиями и представлениями чтения и записи с помощью Entity Framework
Этот шаблон позволяет быстро создать рабочий пользовательский интерфейс записи данных. Он создает код, который обрабатывает ряд распространенных требований и сценариев, таких как:
Доступ к данным. Созданный код считывает и записывает сущности в базу данных. Он работает с подходом Entity Framework Code First, если выбрать существующий класс контекста данных или позволить шаблону создать новый класс DbContext . Он также работает с первым подходом к базе данных Entity Framework или модели, если выбрать существующий класс ObjectContext .
Проверка. Созданный код использует 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 .
Этот шаблон включает дополнительные параметры в диалоговом окне "Добавить контроллер ". Для класса Model можно выбрать любой класс модели в решении, который определяет тип данных, которые пользователи смогут создавать или изменять:
Если вы хотите использовать Entity Framework Code First, можно выбрать любой класс модели.
Если вы используете entity Framework Database First или Entity Framework Model First, обязательно выберите класс сущностей, определенный в концептуальной модели.
Для класса Контекста данных можно выбрать следующие варианты:
- Если вы хотите использовать Code First и не имеет существующего класса контекста данных, выберите **Новый контекст данных ***. Затем будет создан класс контекста данных.
- Если вы хотите использовать Code First и иметь существующий класс контекста данных, выберите его здесь. Оно будет обновлено, чтобы сохранить выбранный класс модели.
- Если вы используете базу данных First или Model First, выберите здесь класс контекста объекта.
Для представлений выберите подсистему представления, которую вы хотите использовать, или выберите "Нет", если вы не хотите создавать шаблон представлений.
Можно выбрать дополнительные параметры для созданных представлений. Например, можно выбрать макет или главную страницу.
Улучшения диалогового окна "ASP.NET MVC 3 Новый проект"
Диалоговое окно, используемое для создания новых ASP.NET проектов MVC 3, включает несколько улучшений, как показано ниже.
Новый шаблон "Проект интрасети"
Список шаблонов проекта содержит новый шаблон приложения интрасети. Этот шаблон содержит параметры для создания веб-приложения с помощью проверка подлинности Windows вместо проверки подлинности форм. Так как приложению интрасети требуются некоторые параметры IIS, которые не могут быть инкапсулированы в шаблоне проекта, шаблон содержит файл readme с инструкциями по созданию шаблона проекта в IIS. Документация по новому шаблону приложения интрасети доступна на веб-сайте MSDN по следующему URL-адресу:
https://msdn.microsoft.com/library/gg703322(VS.98).aspx
Шаблоны проектов теперь включены в ФОРМАТЕ HTML5
Диалоговое окно "Новый проект" теперь содержит параметр для добавления функций, относящихся к HTML5, в шаблоны проектов. Выбор параметра приводит к созданию представлений, содержащих новые элементы HTML5 <header>
и <footer>
<navigation>
элементы.
Обратите внимание, что более ранние версии браузеров не поддерживают теги, относящиеся к HTML5. Чтобы устранить это ограничение, шаблоны проектов HTML5 включают ссылку на библиотеку модернизатора. (См. следующий раздел.)
Теперь шаблоны проектов включают модернизатор 1.7
Модернизация — это библиотека JavaScript, которая обеспечивает поддержку CSS 3 и HTML5 в браузерах, которые еще не поддерживают эти функции. Эта библиотека входит в состав предварительно установленного пакета NuGet в шаблонах для ASP.NET проектов MVC 3. Дополнительные сведения об модернизации см. в статье http://www.modernizr.com/.
Шаблоны проектов включают обновленные версии jQuery, пользовательского интерфейса jQuery и jQuery Validation
Теперь шаблоны проектов включают следующие версии скриптов jQuery:
- jQuery 1.5.1
- Проверка jQuery 1.8
- Пользовательский интерфейс jQuery 1.8.11
Эти библиотеки включены в качестве предварительно установленных пакетов NuGet.
Шаблоны проектов теперь включают ADO.NET Entity Framework 4.1 в качестве предварительно установленного пакета NuGet
В ADO.NET Entity Framework 4.1 включена функция Code First. Code First — это новый шаблон разработки для платформы entity Framework ADO.NET, которая предоставляет альтернативу существующим шаблонам базы данных First и Model First.
Code First ориентирован на определение модели с помощью классов POCO ("простых старых объектов CLR"), написанных в Visual Basic или C#. Затем эти классы можно сопоставить с существующей базой данных или использовать для создания схемы базы данных. Дополнительную конфигурацию можно указать с помощью атрибутов DataAnnotations или с помощью интерфейсов API fluent.
Документация по использованию 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, упомянутые ранее (например, библиотека модернизатора), устанавливая их с помощью NuGet вместо непосредственного добавления скриптов в папку "Скрипты" в содержимом шаблона проекта. Это позволяет использовать 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, который обсуждает способы их совместного использования сегодня.
- Во время установки диалоговое окно принятия EULA отображает условия лицензионного соглашения в окне, которое меньше предполагаемого.
- При редактировании представления Razor (CSHTML или .Vbhtml-файл ), представления. ASP.NET MVC 3 не содержит фрагменты кода для представлений Razor.. aspxselecting фрагмент кода для 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, обновляемые установщиком ASP.NET MVC 3. Эта же проблема применяется, если установить 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
Шаблоны проектов MVC ASP.NET для 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, не имеют правильного набора действий сборки, поэтому при публикации проекта эти типы представлений опущены. Значение действия сборки для этих файлов должно иметь значение Content. ASP.NET MVC 3 RTM исправляет эту проблему для новых файлов, но не исправляет параметры существующих файлов для проекта, созданного с предварительной версией.
- Во время установки диалоговое окно принятия EULA отображает условия лицензионного соглашения в окне, которое меньше предполагаемого.
- При редактировании представления 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, обновляемые установщиком ASP.NET MVC 3. Эта же проблема применяется, если установить 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 и более ранних версий фильтры исключений на контроллере с тем же значением порядка , что и в методе действия, выполняются перед фильтрами исключений в методе действия. Обычно это может быть так, если фильтры исключений применяются без указанного значения порядка . В ASP.NET MVC 3 этот порядок был отменен таким образом, чтобы самый конкретный обработчик исключений выполнялся первым. Как и в предыдущих версиях, если свойство Order явно указано, фильтры выполняются в указанном порядке.
- Новое свойство FileExtensions было добавлено в базовый класс VirtualPathProviderViewEngine. Если ASP.NET ищет представление по пути (а не по имени), рассматриваются только представления с расширением файла, содержащимся в списке, указанном этим новым свойством. Это критическое изменение в приложениях, где настраиваемый поставщик сборки зарегистрирован для включения пользовательского расширения файлов для представлений веб-формы и где поставщик ссылается на эти представления с помощью полного пути, а не имени. Обходной путь — изменить значение свойства FileExtensions , чтобы включить пользовательское расширение файла.
- Реализации фабрики пользовательских контроллеров, которые непосредственно реализуют интерфейс IControllerFactory , должны обеспечить реализацию нового метода GetControllerSessionBehavior , добавленного в интерфейс в этом выпуске. Как правило, рекомендуется не реализовать этот интерфейс напрямую и вместо этого наследить класс из DefaultControllerFactory.
Изменения в ASP.NET MVC 3 RC2
В этом разделе описываются изменения (новые функции и исправления ошибок), внесенные в выпуск ASP.NET MVC 3 RC2 с момента выпуска RC.
Шаблоны проектов изменены на включение 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 внутри переменной приветствия, чтобы он отображался на странице как <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 и свойство View в 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 для просмотра обработчиков для поддержки имен файлов, относящихся к обработчику.
Обработчик представлений может возвращать представление с помощью явного пути представления, как показано в следующем примере:
return View("~/views/home/index.cshtml");
Первый обработчик представлений всегда пытается отобразить представление. По умолчанию подсистема представления веб-формы является первым обработчиком представлений, так как модуль веб-формы не может отобразить представление Razor, возникает ошибка. Теперь подсистемы просмотра имеют свойство FileExtensions , которое используется для указания расширений файлов, которые они поддерживают. Это свойство проверяется, когда ASP.NET определяет, может ли обработчик представлений отображать файл. Это критическое изменение и дополнительные сведения включены в раздел критических изменений в этом документе.
Исправлена вспомогателя LabelFor, чтобы вывести правильное значение атрибута "For"
Исправлена ошибка, из-за которой метод LabelFor отрисовал атрибут для атрибута, который соответствует атрибуту имени входного элемента, а не его идентификатору. Согласно W3C, атрибут должен соответствовать идентификатору входного элемента.
Исправлен метод RenderAction для предоставления явного приоритета значений во время привязки модели
В более ранних версиях явные значения, передаваемые методу RenderAction , игнорируются в пользу текущих значений формы во время привязки модели внутри дочернего действия. Исправление гарантирует, что явные значения имеют приоритет во время привязки модели.
Критические изменения в ASP.NET MVC 3 RC2
- В предыдущих версиях ASP.NET MVC фильтры действий были созданы для каждого запроса, за исключением нескольких случаев. Это поведение никогда не было гарантированным поведением, а лишь подробной реализацией и контрактом для фильтров было рассматривать их без отслеживания состояния. В ASP.NET MVC 3 фильтры кэшируются более агрессивно. Поэтому любые фильтры пользовательских действий, которые неправильно хранят состояние экземпляра, могут быть нарушены.
- Порядок выполнения фильтров исключений изменился для фильтров исключений с одинаковым значением Order . В ASP.NET MVC 2 и более ранних версий фильтры исключений на контроллере, которые имели то же значение Order , что и для метода действия, выполнялись до фильтров исключений метода действия. Обычно это происходит при применении фильтров исключений без указанного значения заказа . В ASP.NET MVC 3 этот порядок был отменен таким образом, чтобы самый конкретный обработчик исключений выполнялся первым. Как и в предыдущих версиях, если свойство Order явно указано, фильтры выполняются в указанном порядке.
- Новое свойство FileExtensions было добавлено в базовый класс VirtualPathProviderViewEngine. Если 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, не имеют правильного набора действий сборки, при этом при публикации проекта эти типы представлений опущены. Значение действия сборки для этих файлов должно иметь значение Content. ASP.NET MVC 3 RC2 исправляет эту проблему для новых файлов, но не исправляет параметры существующих файлов для проекта, созданного с бета-версией.
- Во время установки диалоговое окно принятия EULA отображает условия лицензионного соглашения в окне, которое меньше предполагаемого.
- При редактировании представления 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, обновляемые установщиком ASP.NET MVC 3. Эта же проблема применяется, если установить 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 до последнего выпуска.
кандидат выпуска MVC 3 ASP.NET
ASP.NET выпуск MVC-кандидат был выпущен 9 ноября 2010 года.
Новые возможности в ASP.NET RC-кандидате MVC 3
В этом разделе описаны функции, которые были представлены в выпуске rc-кандидата MVC 3 ASP.NET с бета-версии.
Диспетчер пакетов NuGet
ASP.NET MVC 3 включает в себя диспетчер пакетов NuGet (прежнее название — NuPack), которое является интегрированным средством управления пакетами для добавления библиотек и инструментов в проекты Visual Studio. Это средство автоматизирует шаги, которые разработчики принимают сегодня, чтобы получить библиотеку в исходном дереве.
Вы можете работать с NuGet в качестве средства командной строки в виде интегрированного окна консоли в Visual Studio 2010, в контекстном меню Visual Studio и в виде набора командлетов PowerShell.
Дополнительные сведения о NuGet см. в документации по Nuget.
Диалоговое окно "Новый проект"
При создании проекта диалоговое окно "Новый проект" теперь позволяет указать обработчик представлений, а также тип проекта MVC ASP.NET.
Поддержка изменения списка шаблонов и обработчиков представлений, перечисленных в диалоговом окне, включена в этот выпуск.
Шаблоны по умолчанию приведены ниже.
Пусто Содержит минимальный набор файлов для проекта ASP.NET MVC, включая структуру каталогов по умолчанию для проектов MVC ASP.NET MVC, файл ASP.NET Site.css, содержащий стили MVC по умолчанию и каталог скриптов, содержащий файлы 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 должно соответствовать полю password , чтобы быть допустимым.
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
}
Критические изменения в версии-кандидате MVC 3 ASP.NET
- Порядок выполнения фильтров исключений изменился для фильтров исключений с одинаковым значением Order . В ASP.NET MVC 2 и более ранних версий фильтры исключений на контроллере с тем же порядком , что и в методе действия, были выполнены перед фильтрами исключений в методе действия. Обычно это происходит при применении фильтров исключений без указанного значения заказа . В ASP.NET MVC 3 этот порядок был отменен таким образом, чтобы самый конкретный обработчик исключений выполнялся первым. Как и в предыдущих версиях, если свойство Order явно указано, фильтры выполняются в указанном порядке.
- Добавлено новое свойство FileExtensions в базовый класс VirtualPathProviderViewEngine . При поиске представления по пути (и не по имени) рассматриваются только представления с расширением файла, содержащимся в списке, указанном этим новым свойством. Это критическое изменение для тех, кто регистрирует пользовательского поставщика сборки, чтобы включить пользовательское расширение файла для представлений веб-формы и ссылаться на эти представления с помощью полного пути, а не имени. Обходной путь — изменить значение свойства FileExtensions , чтобы включить пользовательское расширение файла.
Известные проблемы в ASP.NET MVC 3 RC
- Установщик может занять гораздо больше времени, чем предыдущие версии ASP.NET MVC, так как он обновляет компоненты Visual Studio 2010.
- Добавление шаблонов представления при выборе шаблонов представления astrongly typed view только для записи. Их всегда следует игнорировать с помощью шаблонов. Диалоговое окно "Добавление представления" также создает свойства только для чтения при создании представления "Изменить" или "Создать". Свойства, доступные только для чтения, должны быть сформированы только для представлений отображения и списка.
- Отладка не работает, если ASP.NET MVC 3 устанавливается вместе с Async CTP. ASP.NET MVC 3 нельзя установить параллельно с Async 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, не имеют правильного действия сборки, которые не следует публиковать. Действие сборки для этих файлов должно иметь значение Content. ASP.NET RC-кандидат MVC 3 исправляет эту проблему для новых файлов, но не исправляет параметры существующих файлов для проекта, созданного с помощью бета-версии.
- Установщик может занять гораздо больше времени, чем предыдущие версии ASP.NET MVC, так как он обновляет компоненты Visual Studio 2010.
- При выборе строго типизированного представления шаблонов представления "Добавить представление" при выборе строго типизированных шаблонов представления считываются только свойства. Аналогичным образом свойства, доступные только для записи, являются шаблонами для представлений Display.
- Во время установки диалоговое окно принятия EULA отображает условия лицензионного соглашения в окне, которое меньше предполагаемого.
- Установка Visual Studio Async CTP приводит к конфликту с выпуском Razor, который входит в состав установки средств MVC 3 ASP.NET. Убедитесь, что вы не пытаетесь установить visual Studio Async CTP и выпуск Razor на одном компьютере.
- При редактировании представления Razor (CSHTML-файл) элемент меню "Перейти к контроллеру" в Visual Studio не будет доступен, и фрагменты кода отсутствуют.
бета-версия MVC 3 ASP.NET
ASP.NET бета-версия MVC 3 была выпущена 6 октября 2010 года. Приведенные ниже заметки относятся к бета-версии и подлежат любым обновлениям или изменениям, на которые ссылается ASP.NET MVC 3, приведенном выше.
Новые возможности ASP.NET бета-версия MVC 3
В этом разделе описываются функции, появившиеся в выпуске ASP.NET MVC 3 Beta.
Диспетчер пакетов NuGet
ASP.NET MVC 3 включает в себя диспетчер пакетов NuGet, которая является интегрированным средством управления пакетами для добавления библиотек и инструментов в проекты Visual Studio. В большинстве случаев он автоматизирует шаги, которые разработчики принимают сегодня, чтобы получить библиотеку в исходном дереве.
Вы можете работать с NuGet в качестве средства командной строки в виде интегрированного окна консоли в Visual Studio 2010, в контекстном меню Visual Studio и в виде набора командлетов PowerShell.
Дополнительные сведения о NuGet см. в документации по NuGet.
Диалоговое окно "Улучшенный новый проект"
При создании проекта диалоговое окно "Новый проект" теперь позволяет указать обработчик представлений, а также тип проекта MVC ASP.NET.
Поддержка изменения списка шаблонов и обработчиков представлений, перечисленных в диалоговом окне, не включена в этот выпуск.
Шаблоны по умолчанию приведены ниже.
Пусто Содержит минимальный набор файлов для проекта ASP.NET MVC, включая структуру каталогов по умолчанию для проектов MVC ASP.NET MVC, небольшой файл ASP.NET Site.css, содержащий стили MVC по умолчанию и каталог скриптов, содержащий файлы 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.
Помощник | Description |
---|---|
Диаграмма | Отрисовывает диаграмму в представлении. Содержит такие методы, как Chart.ToWebImage, Chart.Save и Chart.Write. |
Якорь доверия | Использует хэширование алгоритмов для создания правильно соленых и хэшированных паролей. |
WebGrid | Отрисовывает коллекцию объектов (обычно данные из базы данных) в виде сетки. Поддерживает разбиение по страницам и сортировку. |
WebImage | Отрисовывает изображение. |
WebMail | Отправляет сообщение электронной почты. |
Краткий справочный раздел, который содержит вспомогательные функции и базовый синтаксис, доступен в рамках документации по синтаксису Razor ASP.NET по следующему URL-адресу:
https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference
Дополнительная поддержка внедрения зависимостей
На основе выпуска ASP.NET MVC 3 preview 1 текущий выпуск включает в себя добавленную поддержку двух новых служб и четырех существующих служб, а также улучшена поддержка разрешения зависимостей и указателя Common Service.
Новый интерфейс IControllerActivator для точного создания экземпляра контроллера
Новый интерфейс 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 или интерфейс Locator Common Service (IServiceLocator). Дополнительные сведения о указателе Common Service см. в разделе CommonServiceLocator на сайте GitHub.
Новый интерфейс IViewActivator для создания экземпляра страницы точного представления
Новый интерфейс IViewPageActivator обеспечивает более точное управление тем, как страницы представления создаются с помощью внедрения зависимостей. Это относится как к экземплярам WebFormView, так и к экземплярам RazorView. В следующем примере показан новый интерфейс:
namespace System.Web.Mvc {
public interface IViewPageActivator {
object Create(ControllerContext controllerContext, Type type);
}
}
Теперь эти классы принимают аргумент конструктора IViewPageActivator, который позволяет использовать внедрение зависимостей для управления экземплярами типов ViewPage, ViewUserControl и WebViewPage.
Поддержка нового сопоставителя зависимостей для существующих служб
Новый выпуск включает поддержку разрешения зависимостей для следующих служб:
- Поставщики проверки модели. Классы, реализующие ModelValidatorProvider, могут быть зарегистрированы в сопоставителе зависимостей, и система будет использовать их для поддержки проверки на стороне клиента и сервера.
- Поставщик метаданных модели. Один класс, реализующий ModelMetadataProvider, можно зарегистрировать в сопоставителе зависимостей, и система будет использовать его для предоставления метаданных для систем шаблонов и проверок.
- Поставщики значений. Классы, реализующие ValueProviderFactory, могут быть зарегистрированы в сопоставителье зависимостей, и система будет использовать их для создания поставщиков значений, потребляемых контроллером и во время привязки модели.
- Привязыватели моделей. Классы, реализующие IModelBinderProvider, могут быть зарегистрированы в сопоставителе зависимостей, и система будет использовать их для создания привязок моделей, используемых системой привязки модели.
Новая поддержка ненавязчивого jQuery На основе Ajax
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 далее в этом документе.
Новые флаги на уровне приложений для проверки клиента и ненавязчивого 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 Beta предоставляет поддержку синтаксиса 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 теперь позволяет указать список полей, которые не должны быть включены в проверку запроса.
Например, если вы разрабатываете подсистему блога, может потребоваться разрешить разметку в полях "Текст" и "Сводка". Эти поля могут представляться двумя входными элементами, каждый из которых имеет атрибут имени, соответствующий имени свойства (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. (В предыдущих версиях параметр заказа не использовался.)
Теперь проверка клиента поддерживает проверку переопределенных свойств, которые имеют примененные атрибуты проверки.
JsonValueProviderFactory теперь зарегистрирован по умолчанию.
Критические изменения
Порядок выполнения фильтров исключений изменился для фильтров исключений с одинаковым значением Order. В ASP.NET MVC 2 и более ранних версий фильтры исключений на контроллере с тем же порядком, что и метод действия, были выполнены перед фильтрами исключений в методе действия. Обычно это происходит при применении фильтров исключений без указанного значения заказа. В ASP.NET MVC 3 этот порядок был отменен таким образом, чтобы самый конкретный обработчик исключений выполнялся первым. Как и в предыдущих версиях, если свойство Order явно указано, фильтры выполняются в указанном порядке.
Известные проблемы
Во время установки диалоговое окно принятия EULA отображает условия лицензионного соглашения в окне, которое меньше предполагаемого.
Представления 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 [] также не поддерживается; вместо этого используйте @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" />
Заявление об отказе
© Корпорация Майкрософт 2011 г. Все права защищены. Этот документ предоставляется как есть. Сведения и представления, выраженные в этом документе, включая URL-адрес и другие ссылки на веб-сайт Интернета, могут изменяться без уведомления. Вы берете на себя все риски, связанные с использованием сведений, приводящихся в данном документе.
Данный документ не предоставляет никаких юридических прав на какую-либо интеллектуальную собственность в любом из продуктов корпорации Майкрософт. Этот документ можно копировать и использовать только для внутренних справочных целей.