понедельник, 12 июля 2010 г.

Синтаксис Razor

После того, как я установил WebMatrix, первым делом захотелось попробовать именно Razor. Как вы наверняка знаете, Razor – это новый View Engine ASP.NET. Некоторые говорят, что это View Engine для MVC – но это немного не так – движок для MVC обязательно будет, только он еще не выпущен (хотя кто знает – может, пока пишу, уже выпустили). Лирики, думаю, достаточно, теперь – к впечатлениям.

К слову сказать, описание синтаксиса есть в электронной книге (BETA-версия, поэтому есть небольшие ляпы). Электронная книга рекомендуется к прочтению полностью тем, кто мало знаком с ASP.NET (с этой точки зрения содержание мне очень даже понравилось). Те, кто уже не один год использует ASP.NET вполне могут читать книгу выборочно (я читал часть "по диагонали", часть внимательно).

Далее, остановлюсь только на синтаксисе. Пример для скриншотов написан в оболочке WebMatrix – редактор там с подсветкой синтаксиса, но, к сожалению, без Intellisense и авто-вставки  закрывающих тегов.


Надо сказать, что при изучении новых, но, базирующихся на чем-то знакомом, технологий, я предпочитаю сначала изучить отличия (довольно часто прилагаются подробные What’s New/Comparison Charts). В свое время, это позволило мне буквально за несколько часов понять отличия C# от С++ и начать писать пробные приложения, параллельно с которыми изучались более глубокие детали. Для Razor такая информация тоже присутствует (вторая глава книги про синтаксис, третья про разметку), но я напишу немного в другом ключе и, опустив очевидные замечания (например, что мы можем if написать). Что касается кода, за редким исключением все соответствует C# (поддержку Visual Basic я позволил себе проигнорировать).

1. Код добавляется на страницу с помощью небезызвестного символа '@' (эскейпится, как нетрудно догадаться, с помощью "@@"). Для одиночного обращения к коду просто пишем вызов свойства или метода, скажем, сегодняшнее число:

2. Блок обрамляется фигурными скобками, а внутри блока можно на время "вернуться" в HTML-разметку и так далее (лично мне такой подход пока весьма нравится):


3. Все управляющие ходом выполнения конструкции (if, for и т.д.) должны содержать фигурные скобки:


4. Присвоенные переменные доступны далее на странице (в том числе вне блока, в котором они объявлены):


5. Если нужно написать простой текст в HTML из кода (без открывающего тега), это осуществимо с помощью тега text  (который в результирующий HTML уже не попадает), а для одной строки можно использовать комбинацию "@:" в ее начале:

6. Для обработки параметров формы доступны свойства IsPost и Request. При этом для конвертации строк доступны методы AsInt/IsInt и т.п.:


7. Для комментариев вне блока кода используется префикс '@', внутри блока кода используются обычные комментарии:


[UPDATE] Синтаксис с тех пор изменился (не знаю как насчет WebMatrix - сейчас нет под рукой) - рекомендую использовать @* *@.

8. Для получения нормальной ссылки по виртуальному пути используется метод Href:


Собственно, основные отличия в синтаксисе кода перечислены, далее вполне можно рассказать о разметке, аналогах master page и PageData (забегая вперед, скажу, что это свойство предназначено для обмена данными между составными частями страницы).

Перед тем как завершить повествование о синтаксисе, хочу рассказать о паре примеров его нестандартного использования. Впечатлил энтузиаст, который добавил поддержку Razor в консольное приложение. Он вдохновил других, которые предложили по аналогии использовать этот синтаксис в шаблонах T4. Что ж, значит, этот синтаксис понравился кому-то, как минимум, не меньше чем мне. Вероятно, сейчас этот процесс зашел еще дальше… Так что, если есть интересные ссылки – делитесь, если есть желание придумать – придумывайте и делитесь ;)

Продолжение следует…

P.S. Немного оффтопа. Набрал в гугле razor, он подсказал мне razor гайд, а я решил посмотреть. Оказалось пока это слово популярнее в мире ММО, подождем :)

6 комментариев:

  1. про пункт номер шесть можно подробнее? а то я не понял кейс

    ОтветитьУдалить
  2. > про пункт номер шесть можно подробнее? а то я не понял кейс

    Видимо речь про конкретный пример на скриншоте - он исключительно для демонстрации :)

    ОтветитьУдалить
  3. А почему пользователь Олег Аксенов является подписчиком и читателем блога Олег Аксенов? )

    ОтветитьУдалить
  4. >А почему пользователь Олег Аксенов является подписчиком и читателем блога Олег Аксенов? )

    Так читаю же :) Да, он такой...

    ОтветитьУдалить
  5. Попробовал комментарии вне блока кода с префиксом @. Ругается. Пример: @Форма для загрузки аватара

    Оказывается надо так @* Форма для загрузки аватара *@

    ASP.NET MVC 3

    ОтветитьУдалить
  6. To @Александр

    Спасибо за комментарий!
    Похоже синтаксис с тех пор изменился (не знаю как насчет WebMatrix - сейчас нет под рукой).
    Статью обновил.

    ОтветитьУдалить