[Отказ от ответственности: я один из разработчиков Microsoft по MVC и Razor, поэтому я могу быть немного предвзятым :)]
Мы разработали Razor как краткий язык шаблонов, который использует только минимально необходимое количество управляющих символов. Я бы сказал, что большие части ваших представлений могут быть выражены меньшим количеством символов, чем тот же код, с использованием «традиционного» синтаксиса WebForms.
Например, следующий фрагмент кода в синтаксисе ASPX:
<% if(someCondition) { %>
<ol>
<% foreach(var item in Model) { %>
<li><%: item.ToString() %></li>
<% } %>
</ol>
<% } %>
В Razor может быть выражено следующим образом:
@if(someCondition) {
<ol>
@foreach(var item in Model) {
<li>@item.ToString()</li>
}
</ol>
}
В то время как версия ASPX имеет 21 символ перехода ( <%
и %>
), версия Razor имеет только три ( @
)
Я бы сказал, что преимущества Razor следующие:
- Краткий синтаксис, который очень похож на то, как вы пишете обычный код C # (посмотрите следующее недавнее сообщение в блоге Фила Хаака, сравнивающее синтаксис Asxp с Razor: http://haacked.com/archive/2011/01/06/razor- syntax-quick-reference.aspx )
- Автоматическое HTML-кодирование вывода (что помогает защитить вас от атак с использованием HTML-инъекций)
- Встроенная (но не 100%) проверка вашей разметки, которая помогает избежать несбалансированных тегов.
Понятия, связанные со страницами, также легко сопоставляются с тем, что у вас есть в ASPX
- Как видите, встроенный код все еще разрешен
- Разделы (которые могут быть необязательными) эквивалентны заполнителям содержимого
- Страницы макета вместо мастер-страниц
- Концепции полного и частичного просмотра одинаковы
@functions { ... }
блоки вместо <script runat="server"> ... </script>
Вдобавок в Razor есть ряд полезных концепций, которые, я бы сказал, лучше, чем то, что доступно в ASPX:
@helper
функции для действительно простого создания функций, которые генерируют разметку
@model
ключевое слово для указания типа модели вашего представления без необходимости писать <%@ Page ...
директиву с полным именем класса
Я хотел бы думать, что мы взялись за реальную проблему, которая заключается в том, чтобы позволить вам более легко писать краткие и соответствующие стандартам представления, в то же время предоставляя вам способы рефакторинга общего кода.
Конечно, не все предпочтут синтаксис, поэтому мы также полностью поддерживаем механизм просмотра ASPX. Кроме того, вы можете попробовать Spark и NHaml, два сторонних движка просмотра, пользующиеся большим успехом в сообществе. В следующем сообщении блога есть хорошее сравнение различных предложений: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx