Razor - это интеллектуальный обработчик программного кода динамических веб-страниц ASP.NET. Имеет простой, интуитивно понятный, синтаксис встраивания программного кода в веб-страницы. Razor - механизм визуализации (view engine) поддерживаемый .NET Framework, .NET Core в рамках ASP.NET и специально предназначен для создания веб-приложений.
Движок Razor даёт всю мощь ASP.NET, но использует упрощенный синтаксис, легкий для новичков и повышающий производительность для профессионалов. Razor позволяет писать программный код без множества открывающих и закрывающих меток по всему шаблону делая процесс разработки по-настоящему быстрым. Дизайн движка Razor использует минимальное количество символов для обозначения границ программного кода, не требуя явно обозначать серверные блоки в HTML-коде.
Разработку движка Razor начали в июне 2010 года и в январе 2011 года он был выпущен для Microsoft Visual Studio 2010 как часть ASP.NET MVC 3 и набора инструментов Microsoft WebMatrix. Целью создания нового механизма визуализации было обеспечение возможности разработчикам использовать свои существующие C# и Visual Basic языковые навык. А также возможности быстрого интегрирования серверного кода в разметку HTML с минимальным количеством разграничивающих символов.
С помощью механизма визуализации Razor можно интуитивно легко создавать сложные композиции программного кода, гармонирующего с разметкой HTML. Когда сервер "читает страницу", движок Razor обрабатывает код веб-страницы прежде, чем сервер отправит сгенерированные данные в браузер. Загруженная в браузер веб-страница, порожденная серверным кодом, ничем не отличается от статического контента HTML. Файлы веб-страниц ASP.NET с синтаксисом Razor имеют специфическое расширение .cshtml (Razor с использованием C #) и .vbhtml (Razor с помощью Visual Basic).
Ниже показаны фрагменты исходников на движке Razor. Более подробно программные коды веб-страниц можно посмотреть, загрузив прикрепленные исходники. Если работать в MS Visual Studio .NET и Visual Studio Code, то программирование на Razor можно освоить буквально за несколько часов. Встроенные в студии анализаторы кода оказывают существенную помощь в освоении механизма визуализации.
Блок объявления типов, методов, объектов и переменных, обозначенный как @functions{…} дает возможность создавать любой, синтаксически корректный код на языках .NET, что равносильно созданию кода в файле с расширением .cs. Программный код в блоке @functions{…} воспринимается как составляющая класса с именем идентичным названию файла .cshtml. Разместив данный файл папке App_Code и создав переменные, методы и классы с модификатором public можно получить доступ к этому коду с любой страницы сайта. Например, вы создали файл Utility.cshtml, то код будет доступен на других страницах через @Utility.название_метода(), @Utility.название_переменной и т.д.
@functions{// Новый классstaticclassMyClass{///<summary> /// Описание метода для документирования ///</summary> ///<returns>описание возвращаемого значения</returns>publicstaticstringGetTicks(){returnDateTime.Now.Ticks.ToString();}privatestaticstrings="123456";}// Функция с возвратомpublicstringFunction1(){return"Привет!!!";}// Функция без возвратаvoidFunction2(){// Задержка для разности результатов при многократных// последовательных вызовах функции GetTicks()Thread.Sleep(1);}}
Razor допускает объявление различных переменных в том числе и неявных переменных с ключевым словом var:
@{// -- Создание переменных различных типов ---// Универсальная переменная varvaruniversalString="Поезд прибудет вовремя.";varuniversalInteger=567;// Можно использовать и переменные конкретных типовstringstr="Урожай грибов в этом году впечатляет.";intintNumber=289;DateTimetimeNow=DateTime.Now;}
При необходимости вывода текста, содержащего зарезервированные слова и названия объектов предназначен показанный ниже синтаксис:
@{// В html-тегах зарезервированные слова отображаются как простой текст<p>
int double string new null if for class delegate Request Response DateTime
</p>// Следующий способ преобразования ключевых слов в простой текст@:int double string new null if for class delegate Request Response DateTime
// Использование не отображаемых тегов <text><text>
int double string new null if for class delegate Request Response DateTime
</text>// Если раскомментировать строку ниже, то интерпретатор известит об ошибочном коде// int double string new null if for class delegate DateTime}
Движок Razor поддерживает концепцию макетов для единого дизайна веб-страниц. Создается макет с общей HTML разметкой, а в представлении указывается какой шаблон использовать. При отправке данных в браузер движок обработает серверный код, объединив содержимое макета и дочернего представления, затем отправит объединенный контент клиенту. Кроме того, Razor позволяет обозначать секции в макете, которые в представлениях заменяются соответствующим кодом. Количество и названия секций можно определять по своему усмотрению.
Секции в представлении можно располагать в любом порядке, но в браузер они будут выводится строго в порядке, указанном в макете. Использование секций значительно упрощает процесс создания множества родственных веб-страниц.
Дочерняя страница представления для определенного макета:
@{// Определение макета текущего представленияLayout="~/LayoutPages/_LayoutMain.cshtml";}<h1>Тело веб-страницы</h1><p><strong>Абзац №1</strong></p><p>
Абзац №2
</p>@section Верхний блок{
Верхняя строка сайта
}@section Нижний блок{
Нижняя строка веб-страницы
}@section Left{
Левый столбец
}@section Right{
Правый столбец
}
Ниже прикреплены исходники веб-страниц с обработчиком кода Razor. Исходники созданы в MS Visual Studio .NET 2013 и могут быть протестированы в Visual Studio Code, SharpDevelop, WebMatrix. Поддержка Razor включена в Visual Studio 2012 и Visual Studio 2013 по умолчанию.