Как я могу использовать вспомогательные функции с именами в RazorEngine? - PullRequest
0 голосов
/ 25 сентября 2018

Я использую RazorEngine для создания системы шаблонов электронной почты и хотел бы поддерживать вспомогательные функции в отдельных файлах cshtml из моих основных шаблонов.Например, скажем, у меня есть структура папок, подобная этой:

/Templates
    Support.cshtml
    Registration.cshtml
    Marketing.cshtml
/Helpers
    /Shared
        Common.cshtml
        Images.cshtml
    /Marketing
        Ads.cshtml
        Products.cshtml

Мне бы хотелось, чтобы шаблоны обращались к помощникам следующим образом:

<body>
    @Common.Header()
    <img src="@Images.Resize(@Model.ImageUrl)" />
</body>

Но причина, по которой яЯ хотел бы, чтобы они назывались в пространстве имен, потому что я хотел бы сказать, что команда рекламы сможет писать и поддерживать помощников, не беспокоясь о конфликтах имен, скажем, с обычными помощниками или любой другой командой.Они могли бы с уверенностью назвать помощника Resize(), не беспокоясь о @Images.Resize, потому что к их помощнику обращались бы как @Ads.Resize или @Marketing.Ads.Resize().

Это кажется несколько возможным на основании того, как помощники работают в собственной реализацииRazor (https://docs.microsoft.com/en-us/aspnet/web-pages/overview/ui-layouts-and-themes/creating-and-using-a-helper-in-an-aspnet-web-pages-site), но наша кодовая база распределена и поэтому не имеет папки App_Code, а также RazorEngine во многом отличается, поэтому я не смог заставить его работать.

Сейчас я получаю своих помощников в шаблоны с помощью конкатенации строк, что также кажется неправильным, поэтому есть ли способ заставить эту работу работать с RazorEngine?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Я предлагаю переместить ваш код из папки Helper в App_Code:
1. Щелкните правой кнопкой мыши ваш проект (не решение)> Добавить> Добавить папку ASP.NET> App_Code
2. Создайте шаблон с помощью *Синтаксис 1003 *:

@helper MakeNote(string content) {
  <div class="note" 
       style="border: 1px solid black; width: 90%; padding: 5px; margin-left: 15px;">
    <p>
      <strong>Note</strong>&nbsp;&nbsp; @content
    </p>
  </div>
}

3.Используйте шаблон, который вы создали ранее, объявив @MyHelpers.MakeNote("My test note content.")

<!DOCTYPE html>
  <head>
    <title>Test Helpers Page</title>
  </head>
  <body>
    <p>This is some opening paragraph text.</p>

    <!-- Insert the call to your note helper here. -->
    @MyHelpers.MakeNote("My test note content.")

    <p>This is some following text.</p>
  </body>
</html>

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

0 голосов
/ 27 сентября 2018

Страницы Razor скомпилированы в простые классы, и помощники становятся методами этих классов, поэтому вы не можете поместить их в пространство имен.

Но, если вы не возражаете, поместите ваши файлы cshtml в другой проект библиотеки классов, тогда это возможно, используя расширение под названием «Razor Generator».

  • Установите «генератор бритв» из «Расширения и обновления».
  • Перезапустите Visual Studio и откройте ваш веб-проект.
  • Добавление нового проекта библиотеки классов.
  • Добавление нового файла cshtml (например, Ads.cshtml) в недавно созданный проект.
  • Сначала напишите следующий текстстрока файла.

    @ * Генератор: MvcHelper GeneratePrettyNames: true * @

  • поместить некоторый критический для бизнеса код в файл

    @ helper PlaceAd () {реклама}

  • В свойствах файла задайте для «Пользовательского инструмента» значение «RazorGenerator», а для «Пространства имен пользовательского инструмента» - пространство имен, которое вы хотели бы

  • ссылка на этот новыйdll из веб-приложения.

  • Ссылка на вашего нового важного помощника по бизнесу из любого представления

  • Прибыль

...