ASP.NET MVC 3 Бритвенные шаблоны VS RenderPartial - PullRequest
23 голосов
/ 08 декабря 2010

Я только что прочитал это сообщение в блоге на Шаблон бритвы в ASP.NET MVC 3.

Проще говоря, Я просто не понимаю!

То есть, я не понимаю, почему нам нужен этот (довольно) сложный код для достижения того, что можно сделать IMO проще (и точнее) с помощью @RenderPartial?

Вот что мне не нравится:

  1. Шаблон хранится как Func<T,HelperResult> делегат?
  2. Этот делегат шаблона сохраняется в ViewData контроллера (например, HttpContext.Current.Items)

Единственное «преимущество», которое я прочитал из этого блога, заключается в том, что отдельный файл не требуется для шаблонов, то есть вам не нужно перекомпилировать и т. Д.

Но я не вижу в этом веского аргумента. С дополнительными файлами все в порядке, если организация решения не взломана.

Я предпочитаю использовать @RenderPartial, так как я могу держать разметку отдельно от главного представления, и я могу отображать это как inline (время визуализации), так и с помощью jQuery (например, событие AJAX).

Может быть, я что-то здесь упускаю, но кто-нибудь может объяснить, почему мы должны выбрать Razor Templating вместо RenderPartial для создания повторно используемого контента?

Ответы [ 2 ]

19 голосов
/ 08 декабря 2010

Хорошо, вы должны спросить автора этого поста о его мотивации для представления этой техники.

Это, безусловно, иллюстрирует, что возможно в Razor.Должны ли вы использовать это другое дело.Лично я считаю, что есть альтернативные методы, которые менее сложны (я согласен с вашими соображениями относительно хранения Func внутри контекста запроса).

  • Есть @RenderPartial, о котором вы уже упоминали.
  • Вы также можете использовать синтаксис @helper (в качестве локального или глобального помощника)
  • Вы можете написать помощник html (и использовать TagBuilder для сборки вывода)
  • Вы можете написать дочернее действие
  • Вы можете написать шаблонного помощника

Теперь, когда я смотрю на приведенный выше список, я думаю, что MVC может предоставить слишком большой выбор:)

Обновление Чтобы лучше показать, как полезны встроенные шаблоны, я написал сообщение в блоге об их использовании для вызова разделов с кодом по умолчанию: Необязательные разделы бритвы с содержимым по умолчанию .

Вы можете использовать это, чтобы написать что-то вроде этого:

@this.RenderSection("OptionalSection", @<div>Default Content</div>) 
3 голосов
/ 26 июля 2011

Распространенным заблуждением о Razor является то, что его нельзя использовать вне контекста ASP.Net MVC framework.Это наиболее распространенный сценарий, однако мощность бритвенного двигателя выходит за рамки этого.

Вы можете определить бритвенные шаблоны в консольном приложении или даже в библиотеке.В качестве упрощенного примера рассмотрим приложение, которое отправляет клиентам автоматизированные электронные письма в формате HTML.В старые времена вы либо прибегали к конкатенации строк, либо к XSLT-преобразованию, либо к чему-то еще.В любом случае, вы не можете визуально увидеть свою разметку, и манипулирование становится кошмаром обслуживания.

С шаблонами Razor вы можете определить свой шаблон как разметку HTML, где вы можете легко визуализировать и тестировать его.отличная статья, демонстрирующая эту возможность: http://www.west -wind.com / weblog / posts / 2010 / Dec / 27 / Hosting-the-Razor-Engine-for-Templating-in-NonWeb-Applications

Примечание: Я не говорю, что ссылка, которую вы указали, показывает это, просто пример того, почему вы хотели бы выйти за пределы методов, перечисленных в ответе @ marcind.

...