Предоставляет ли синтаксис Razor неоспоримое преимущество в разметке пользовательского интерфейса? - PullRequest
88 голосов
/ 26 октября 2010

Я замечаю, что Скотт Гатри начинает упоминать Razor справедливый бит в своем блоге, но я просто не уверен, что он подходит для моего стиля.

Конечно, это довольно незнакомый стиль для тех, кто довольно привык к «стандартному» виду разметки ASP.Net (заполнители содержимого и встроенный код), но он выглядит как множество дополнительных страниц для управления и менее четкой разметки для меня.

Каковы чувства других людей к этому? Это то, что, по вашему мнению, должно быть серьезно рассмотрено при создании новых MVC-страниц или это просто попытка решить проблему, которой не существует?

Ответы [ 3 ]

153 голосов
/ 26 октября 2010

[Отказ от ответственности: я являюсь одним из разработчиков 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 обладает следующими преимуществами:

  1. Краткий синтаксис, который очень похож на то, как вы пишете обычный код на C # (посмотрите следующее недавнее сообщение в блоге:Фил Хаак, сравнивающий Asxp с синтаксисом Razor: http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx)
  2. Автоматическая HTML-кодировка вывода (которая помогает защитить вас от html-атак)
  3. Встроенная (хотя и не 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

3 голосов
/ 24 марта 2012

Лично я очень ценю сокращение количества используемых escape-символов. Использование <% %> становится очень утомительным по сравнению с @{} и не столь привлекательным с точки зрения синтаксиса.

Более того, написание целого определения для кода и страницы упрощается до единого @model model.

Как также заметил Марсинд, не всегда нужно включать runat=server.

В целом, я действительно ценю использование движка Razor и считаю, что он не только облегчает мне разработку, но и облегчает чтение кода.

2 голосов
/ 31 января 2011

Вы можете попробовать этот конвертер .Для получения дополнительной информации проверьте это сообщение в блоге .

...