Введение в новые возможности ASP.NET MVC 4
В этой статье дается описание новых возможностей веб-фреймворка ASP.NET MVC 4, представленных в первой Developer Preview версии.
Мобильный веб
Одним из самых устойчивых и набирающих силу трендов в современной разработке является тренд мобильного веба. Иметь мобильную версию сайта – это уже не просто предложение удобного доступа для некоторых пользователей, но средство зарабатывания денег и расширения аудитории.
Именно поэтому в ASP.NET MVC 4 большой упор сделан на предоставление специальных возможностей разработчику, который желает сделать мобильную версию сайта.
Мобильный сайт – два подхода
Шаблон мобильного сайта
В ASP.NET MVC 4 был добавлен новый специальный шаблон проекта для мобильного сайта, вы можете воспользоваться им для создания отдельной версии сайта, которая будет работать на мобильных устройствах (рисунок 1).
Рис.1. Новый шаблон мобильного сайта
После создания проекта на базе нового шаблона и его запуска вы можете увидеть характерное мобильное представление в браузере (рисунок 2).
Рис. 2. Представление мобильного сайта
При это весь функционал стандартного шаблона по-прежнему доступен: авторизация, демонстрационные страницы, валидация на ошибки. Интерфейс нового представления базируется на JavaScript-библиотеке jQuery Mobile, которая теперь входит в состав ASP.NET MVC.
Используя новый шаблон вы можете легко создать отдельный мобильный вариант для своего сайта.
Адаптивная разметка и новый шаблон по умолчанию
Вторым вариантом создания мобильной версии сайта является использование адаптивной разметки, которая меняет представление в зависимости от разрешения экрана. В ASP.NET MVC 4 был обновлен стандартный шаблон веб-приложения по умолчанию, который уже использует адаптивную верстку (рисунок 3).
Рис. 3. Новый шаблон приложения по умолчанию
Кроме обновленного внешнего вида, который стал более привлекательным в шаблоне был использован подход адаптивного рендеринга. Идея адаптивного рендеринга заключается в следующем: по мере изменения разрешения, внешний вид страницы подстраивается под свободное пространство, отображая только те элементы, которые имеют смысл (рисунок 5).
Рис. 5. Адаптивная разметка
Обратите внимание на эти изображения. При уменьшении разрешения разметка подстраивается под новые параметры экрана и, например, скрывает излишние элементы оформления, изменяет расположение элементов и ключевых пунктов меню. При низких разрешениях, разметка формируется таким образом, чтобы важный контент занимал всю полезную площадь доступную для отображения.
Адаптивная разметка в проекте ASP.NET MVC 4 базируется на новых стандартах HTML5 и CSS3 в частности на стандарте CSS3 Media Queries, который позволяет определить различные правила CSS для определенных условий, например, разных разрешений. Вот как это работает: в файле определения стилей Site.css вы можете обнаружить следующий код:
Конструкция media определяет правило которое будет использовать вложенную разметку при выполнении условия. В данном случае, условием служит использование дисплеев и размер отображаемого окна до 850 пикселей. Используя подобный механизм и задавая правила вы можете очень гибко реагировать на различные условия отображения вашего сайта. Кроме того, в файле компоновки _Layout.cshtml определен мета-тег:
который подсказывает браузеру необходимость правильно подгонять контент под ширину экрана.
Кроме адаптивной разметки в обновленном шаблоне приложения используются другие новые стандарты, например градиенты CSS Gradients.
Еще одним изменением в шаблоне веб-приложения стало внедрение поддержки оконных форм для представлений логина и регистрации (рисунок 6).
Рис. 6. Окно формы регистрации
Данный функционал примечателен тем, что при поддержки сценариев браузером предлагает пользователю воспользоваться формой в виде всплывающего окна, а при отсутствии сценариев – автоматически переводит пользователя на отдельную страницу форы регистрации (рисунок 7).
Рис. 7. Отдельная страница формы регистрации
Данный функционал реализован с помощью нового файла скриптов AjaxLogin.js, включенного в проект. Сами окна форм построены на функционале библиотеки jQuery UI, которая включена в проект по умолчанию.
Режимы отображения
Ранее мы говорили только о изменениях в шаблонах проектов. Помимо этих нововведений в ASP.NET MVС 4 был добавлен новый функционал на уровне самого фреймворка, предназначенный для упрощения работы сайта с мобильными устройствами.
Новая функция режимов отображения (Display Modes) позволяет приложению выбирать представления основываясь на типе браузера, который запросил страницу. Например, если десктопный браузер запрашивает страницу Home, то веб-приложение может вернуть обычное представление Index, которое формируется на базе шаблона Views\Home\Index.cshtml. По запросу от браузера, сайт сможет вернуть специальное мобильное представление на базе шаблона Views\Home\Index.mobile.cshtml.
Этот функционал работает автоматически, достаточно определить дополнительный шаблон с постфиксом *.mobile.cshtml и он будет использован для мобильных клиентов. Точно так же можно определить мобильную версию _Layout.cshtml — _Layout.mobile.cshtml и мобильные версии частичных представлений: _MyPartial.cshtml — _MyPartial.mobile.cshtml.
Прелесть и мощь нового функционала кроется в возможности расширения и точной настройки под конкретные мобильные устройства, мобильные ОС, любые другие условия. Вы можете зарегистрировать свой экземпляр DefaultDisplayMode, указав имя, которое будет использовано в названии представления и условие, согласно которому это представление будет отбираться.
Например, вы можете добавить следующий код в Application_Start в файле Global.asax:
Этот код определяет новый тип представления “iPhone” и указывает на условие, когда такое представление нужно использовать: когда строка агента клиента пользователя содержит строку “iPhone”, что указывает на использование мобильного телефона iPhone пользователем. При выполнении этого условия будет использоваться представление Views\Shared\_Layout.iPhone.cshtml.
Вы можете построить гораздо более сложное условие для определения того, какое именно представление необходимо использовать для конкретного запроса. Теперь становится гораздо проще кастомизировать свой сайт для разных устройств и мобильных операционных систем.
Переключение режимов отображения
Полезной возможностью мобильного сайта является возможность переключения на стандартное десктопное представление, в тех случаях, когда пользователю не хватает функционала мобильного сайта. Порой может возникнуть другая ситуация, когда пользователь предпочтет работать в мобильной версии вместо стандартной.
Для обеспечения такой функции в ASP.NET MVC 4 был введен новый механизм получения информации о текущем контексте запроса: стандартный ли он либо переопределенный. Теперь свойство HttpContext содержит ряд новых методов:
Рецепты
Рецепты – это новая возможность расширения функций Visual Studio и ваших проектов для частых задач: генерации кода, создании форм, скаффолдинга.
Рассмотрим, как работают рецепты на простом примере. Создайте проект на базе ASP.NET MVC 4 и с помощью пакетного менеджера NuGet установите пакет MvcHaack.ViewMobilizer. Этот пакет содержит в себе рецепт для автоматической генерации мобильных представлений для всех или избранных представлений вашего сайта.
После установки пакета в контекстном меню папки Views выберите пункт Add – Run Recipie (рисунок 8).
Рис. 8. Запуск рецепта
Перед вами появится окно выбора установленных в проект рецептов (рисунок 9).
Рис. 9. Окно выбора рецептов
Выберите рецепт View Mobilizer и нажмите ОК. Будет запущен внутренний механизм рецепта, который отобразит уже свою собственную форму позволяющую выбрать представления для созданий их мобильный версий (рисунок 10).
Рис. 10. Окно созданное рецептом
Выберите нужные представления и нажмите Mobilize! Вы можете задать необходимый постфикс, если создаете представления для собственных режимов отображения (например, iPhone). Рецепт автоматически создаст необходимые файлы и добавит их в проект (рисунок 11).
Рис. 11. Созданные с помощью рецепта файлы
Как работают рецепты
Рецепт – это библиотека классов, которая содержит специально созданный класс рецепта и необходимые диалоговые окна для задания параметров работы рецепта.
Рецепты могут быть разного типа, но все они должны реализовывать один из интерфейсов: IRecipe, IFolderRecipe, IFileRecipe, которые определены в новом пространстве имен Microsoft.VisualStudio.Web.Mvc.Extensibility.Recipes.
Класс рецепта должен являться экспортируемым типом фреймворка MEF, то есть быть отмечен атрибутом [Export(typeof(IRecipe))]. Ниже представлен класс рецепта View Mobilizer созданный Филом Хааком:
Рецепты – это мощный новый инструмент, который интегрируется в проекты с помощью пакетного менеджера NuGet и позволяет накапливать практики для кодогенерации и выполнении других рутинных задач. Со временем, благодаря сообществу и NuGet рецептов будет множество.
Поддержка Async для асинхронных контроллеров
Возможность создавать асинхронные контроллеры появилась в ASP.NET MVC уже давно. В новой версии фреймворка эту возможность можно будет использовать на базе мощных асинхронных нововведений новой версии C#.
Теперь вы сможете написать свой метод в асинхронном контроллере следующим образом:
Обратите внимание на использование новых конструкций языка async и await. Они позволяет этому коду выполнить методы newsService.GetHeadlinesAsync и sportsService.GetScoresAsync асинхронно.
Кроме непосредственной поддержки асинхронных расширений, во фреймворке добавлена поддержка таймаутов асинхронных расширений и возможности отмены выполнения асинхронной операции. Для определения таймаута асинхронного действия в контроллере необходимо пометить его новым атрибутом AsyncTimeout:
Для отображения специального представления после истечения времени таймаута используется атрибут HandleError:
[HandleError(ExceptionType = typeof(TaskCanceledException), View = «TimedOut»)]
После истечении времени таймаута клиенту будет показано представление TimeOut.
Кроме того, вы можете определить специальный параметр типа CancelationToken для того, чтобы добавить возможность отменить выполнение асинхронной операции (пример выше).
Заключение
Нововведения в ASP.NET MVC 4 представленные в первой Developer Preview версии демонстрируют желание разработчиков ответить на современные запросы стоящие перед веб-разработкой и предложить простые способы создания мобильных представлений сайтов и упростить работу со множеством мобильных устройств.
С другой стороны, рецепты позволяют по-новому расширить функционал проектов и Visual Studio на основе знакомых механизмов MEF и NuGet.
Наконец, поддержка асинхронных нововведений языка C#5 для создания асинхронных контроллеров и действий позволит значительно упростить создание сложных и масштабируемых веб-приложений.
ASP.NET MVC 4
В этом документе описывается выпуск ASP.NET MVC 4.
Замечания по установке
ASP.NET MVC 4 для Visual Studio 2010 можно установить с домашней страницы ASP.NET MVC 4 с помощью установщика веб-платформы.
Рекомендуется удалить все ранее установленные предварительные версии ASP.NET MVC 4 перед установкой ASP.NET MVC 4. Вы можете обновить бета-версию ASP.NET MVC 4 и RC до ASP.NET MVC 4 без удаления.
ASP.NET MVC 4 можно установить и запустить параллельно с ASP.NET MVC 3.
Документация
Документацию по ASP.NET MVC доступна на веб-сайте MSDN по URL-адресу:
Руководства и другие сведения о ASP.NET MVC доступны на странице MVC 4 веб-сайта ASP.NET (https://www.asp.net/mvc/mvc4).
Поддержка
ASP.NET MVC 4 полностью поддерживается. Если у вас возникли вопросы о работе с этим выпуском, вы также можете опубликовать их на форуме ASP.NET MVC (https://forums.asp.net/1146.aspx), где участники сообщества ASP.NET часто могут предоставлять неофициальную поддержку.
Требования к программному обеспечению
Для компонентов ASP.NET MVC 4 для Visual Studio требуется PowerShell 2,0 и Visual Studio 2010 с пакетом обновления 1 (SP1) или Visual Web Developer Express 2010 с пакетом обновления 1 (SP1).
Новые возможности в ASP.NET MVC 4
В этом разделе описаны функции, которые появились в выпуске ASP.NET MVC 4.
Веб-API ASP.NET
ASP.NET MVC 4 включает веб-API ASP.NET, новую платформу для создания служб HTTP, которые могут обращаться к широкому спектру клиентов, включая браузеры и мобильные устройства. Веб-API ASP.NET также является идеальной платформой для создания служб RESTFUL.
Веб-API ASP.NET включает поддержку следующих функций:
Дополнительные сведения о веб-API ASP.NET см. https://www.asp.net/web-api.
Усовершенствования шаблонов проектов по умолчанию
Шаблон, используемый для создания новых проектов ASP.NET MVC 4, был обновлен для создания более современной веб-сайта:
Помимо косметических улучшений, в новом шаблоне улучшены функциональные возможности. Шаблон использует метод, называемый адаптивной отрисовкой, для удобного поиска в настольных браузерах и в мобильных браузерах без каких-либо настроек.
Чтобы увидеть адаптивную визуализацию в действии, можно использовать эмулятор мобильного устройства или просто попытаться уменьшить размер окна браузера настольных систем. Когда окно браузера становится достаточно малым, макет страницы изменится.
Шаблон мобильного проекта
Если вы запускаете новый проект и хотите создать сайт специально для мобильных и планшетных браузеров, можно использовать новый шаблон проекта мобильного приложения. Это основано на jQuery Mobile, библиотеке с открытым исходным кодом для создания пользовательского интерфейса, оптимизированного для сенсорного ввода:
Этот шаблон содержит ту же структуру приложения, что и шаблон Интернет-приложения (и код контроллера практически идентичен), но он использует jQuery Mobile, чтобы выглядеть хорошо и хорошо работать на мобильных устройствах с поддержкой сенсорного ввода. Дополнительные сведения о структурировании и стиле мобильного пользовательского интерфейса см. на веб-сайте мобильного проекта jQuery.
Если у вас уже есть сайт, ориентированный на Рабочий стол, в который нужно добавить представления, оптимизированные для мобильных устройств, или вы хотите создать отдельный сайт, который будет работать с другими представлениями для настольных и мобильных браузеров, можно использовать новые режимы отображения. (См. следующий раздел).
Режимы экрана
Новая функция режима отображения позволяет приложению выбирать представления в зависимости от браузера, выполняющего запрос. Например, если браузер настольных систем запрашивает домашнюю страницу, приложение может использовать шаблон Views\Home\Index.cshtml. Если браузер мобильного устройства запрашивает домашнюю страницу, приложение может вернуть шаблон Виевс\хоме\индекс.Мобиле.кштмл.
Макеты и части можно также переопределять для конкретных типов браузеров. Пример:
После выполнения этого кода, когда браузер Apple iPhone выполняет запрос, приложение будет использовать макет Views\Shared\_Layout. iPhone. cshtml (если он существует). Дополнительные сведения о режиме просмотра см. в статье ASP.NET MVC 4 Mobile Features. Приложения, использующие Дисплаймодепровидер, должны установить исправленный пакет NuGet DisplayModes. Обновление ASP.NET 2012 включает в себя исправленный пакет NuGet DisplayModes в новых шаблонах проектов. Дополнительные сведения об исправлении см. в статье ASP.NET MVC 4 Mobile кеширование исправлена.
Мобильные и мобильные функции jQuery
Сведения о создании мобильных приложений с помощью ASP.NET MVC 4 с использованием jQuery Mobile см. в руководстве по мобильным функциям ASP.NET MVC 4.
Поддержка задач для асинхронных контроллеров
Пакет SDK Azure
ASP.NET MVC 4 поддерживает версии 1,6 и более поздних версий пакета Windows Azure SDK.
Миграция баз данных
Проекты ASP.NET MVC 4 теперь включают Entity Framework 5. Одной из замечательных функций Entity Framework 5 является поддержка миграции баз данных. Эта функция позволяет легко развивать схему базы данных с помощью переноса, ориентированного на код, с сохранением данных в базе данных. Дополнительные сведения о миграции баз данных см. в разделе Добавление нового поля в модель фильмов и таблицу в учебнике Введение в ASP.NET MVC 4.
Пустой шаблон проекта
Шаблон пустого проекта MVC теперь действительно пуст, чтобы можно было начать с полного чистого материала. Предыдущая версия шаблона пустого проекта была переименована в базовый.
Добавление контроллера в любую папку проекта
Теперь можно щелкнуть правой кнопкой мыши и выбрать пункт Добавить контроллер из любой папки в проекте MVC. Это обеспечивает большую гибкость в Организации контроллеров, тем не менее, включая поддержание контроллеров MVC и веб-API в отдельных папках.
Объединение и минификация
Платформа для объединения и минификации позволяет сократить количество HTTP-запросов, которые должна выполнить веб – страница, объединив отдельные файлы в один объединенный файл для сценариев и CSS. Затем он может уменьшить общий размер этих запросов, Минификация содержимое пакета. Минификация может включать такие действия, как удаление пробелов для сокращения имен переменных, чтобы даже сворачивать селекторы CSS на основе их семантики. Пакеты объявляются и настраиваются в коде и легко указываются в представлениях с помощью вспомогательных методов, которые могут формировать либо одну ссылку на пакет, либо, при отладке, несколько ссылок на отдельное содержимое пакета. Дополнительные сведения см. в разделе объединение и минификации.
Включение имен входа из Facebook и других сайтов с помощью OAuth и OpenID Connect
Обновление проекта ASP.NET MVC 3 до ASP.NET MVC 4
ASP.NET MVC 4 можно установить параллельно с ASP.NET MVC 3 на том же компьютере, что дает гибкость в выборе времени обновления приложения ASP.NET MVC 3 до ASP.NET MVC 4.
Самый простой способ обновления — создать новый проект ASP.NET MVC 4 и скопировать все представления, контроллеры, код и файлы содержимого из существующего проекта MVC 3 в новый проект, а затем обновить ссылки на сборки в новом проекте, чтобы они соответствовали любому шаблону, не являющемуся MVC в клудед ассембилес, который вы используете. Если вы внесли изменения в файл Web. config в проекте MVC 3, необходимо также объединить эти изменения в файл Web. config в проекте MVC 4.
Чтобы вручную обновить существующее приложение ASP.NET MVC 3 до версии 4, выполните следующие действия.
Во всех файлах Web. config в проекте (один в корне проекта, один в папке Views, а другой — в папке Views для каждой области проекта) замените каждый экземпляр следующего текста (Примечание: System. Web. веб-страницы, версия = 1.0.0.0 не найдена в проекты, созданные с помощью Visual Studio 2012):
со следующим соответствующим текстом:
В корневом файле Web. config обновите элемент веб -страницы: Version на «2.0.0.0» и добавьте новый ключ пресервелогинурл со значением «true»:
В обозреватель решений щелкните ссылки правой кнопкой мыши и выберите пункт Управление пакетами NuGet. В левой области выберите онлине\нужет официальный источник пакета, а затем обновите следующие:
В обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите команду Выгрузить проект. Затем щелкните имя правой кнопкой мыши и выберите пункт изменить имя_проекта. csproj.
Сохраните изменения, закройте файл проекта (. csproj), который вы редактировали, щелкните правой кнопкой мыши проект и выберите Перезагрузить проект.
Если проект ссылается на сторонние библиотеки, скомпилированные с помощью предыдущих версий ASP.NET MVC, откройте корневой файл Web. config и добавьте в раздел конфигурации следующие три элемента bindingRedirect :
Изменения из версии-кандидата ASP.NET MVC 4
Заметки о выпуске для версии-кандидата ASP.NET MVC 4 можно найти здесь:
Основные изменения в версии-кандидате ASP.NET MVC 4 в этом выпуске приведены ниже.
Известные проблемы и критические изменения
Версия-кандидат и RTM ASP.NET MVC 4 неправильно возвратила кэшированные представления рабочего стола при возврате мобильных представлений.
Критические изменения в подсистеме представления Razor. Следующие типы были удалены из System. Web. MVC. Razor:
Также были удалены следующие методы:
Когда WebMatrix. dll включается в каталог «ASP.NET» приложений MVC 4, он принимает по URL-адресу для проверки подлинности с помощью форм. Добавление сборки WebMatrix. WebDeploy. dll в приложение (например, при выборе «веб-страницы ASP.NET с синтаксисом Razor» при использовании диалогового окна Добавление развертываемых зависимостей) переопределяет перенаправление входа в систему проверки подлинности на/аккаунт/Логон, а не/аккаунт/логин, как ожидалось контроллером учетной записи ASP.NET MVC по умолчанию. Чтобы предотвратить такое поведение и использовать URL-адрес, который уже указан в разделе Authentication файла Web. config, можно добавить appSetting с именем Пресервелогинурл и задать для него значение true:
Не удается установить диспетчер пакетов NuGet при попытке установить ASP.NET MVC 4 для параллельных установок Visual Studio 2010 и Visual Web Developer 2010. Чтобы запустить Visual Studio 2010 и Visual Web Developer 2010 параллельно с ASP.NET MVC 4, необходимо установить ASP.NET MVC 4 после того, как обе версии Visual Studio уже установлены.
Удаление ASP.NET MVC 4 завершается сбоем, если предварительные условия уже удалены. Чтобы аккуратно удалить ASP.NET MVC 4you, перед удалением Visual Studio необходимо удалить ASP.NET MVC 4.
Установка ASP.NET MVC 4 прерывает приложения ASP.NET MVC 3 RTM. Приложения ASP.NET MVC 3, созданные в выпуске RTM (а не в средстве ASP.NET MVC 3 Tools Update ), для параллельной работы с ASP.NET MVC 4 должны внести следующие изменения. Сборка проекта без выполнения этих обновлений приведет к ошибкам компиляции.
Обязательные обновления
В корневом файле Web. config добавьте новую запись с ключевыми веб-страницами: Version и Value 1.0.0.0.
В обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите команду Выгрузить проект. Затем щелкните имя правой кнопкой мыши и выберите пункт изменить имя_проекта. csproj.
Нахождение следующих ссылок на сборки:
Замените их следующим:
Сохраните изменения, закройте файл проекта (. csproj), который вы редактировали, и щелкните правой кнопкой мыши проект и выберите перезагрузить.
Изменение проекта ASP.NET MVC 4 на целевой сервер 4,0 с 4,5 не приводит к обновлению ссылки на сборку EntityFramework: Если изменить проект ASP.NET MVC 4 на целевой сервер 4,0 после предназначенных 4,5, ссылка на сборку EntityFramework будет по-прежнему указывать на версию 4,5. Чтобы устранить эту проблему, удалите и переустановите пакет NuGet EntityFramework.
403. запрещено при запуске приложения ASP.NET MVC 4 в Azure после перехода на целевую 4,0 из 4,5: Если вы измените проект ASP.NET MVC 4 на Target 4,0 после предназначенных 4,5, а затем выполните развертывание в Azure, в среде выполнения может появиться сообщение об ошибке «403 запрещено». Чтобы решить эту проблему, добавьте следующий фрагмент в файл Web. config:
Visual Studio 2012 аварийно завершает работу при вводе «‘ в строковом литерале в файле Razor. Чтобы обойти эту ошибку, сначала введите закрывающую кавычку строкового литерала.
Поставщики Google и LinkedIn не поддерживаются на веб-сайтах Azure. Используйте альтернативные поставщики проверки подлинности при развертывании на веб-сайтах Azure.
При использовании Урипасекстенсионмаппинг с IIS 8 Express/IIS при попытке использовать расширение вы получите 404 ошибок, не найденных. Обработчик статических файлов будет влиять на запросы к веб-API, которые используют урипасекстенсионмаппингс. Задайте runAllManagedModulesForAllRequests = true в файле Web. config, чтобы устранить эту ошибку.
Метод Controller. Execute больше не вызывается. Все контроллеры MVC теперь всегда выполняются асинхронно.






