Razor обычно ассоциируется с MVC. В C1 MVC поддерживается благодаря "MVC-плееру". И соответственно, поддерживается синтаксис Razor.
Создание Razor-функции
После сохранения ваша функция станет доступна для выбора в окне для вставки функции, (например, при добавлении на страницу).
Далее мы рассмотрим, как добавлять входные параметры в Razor-функции и как изменить тип возвращаемого значения.
Благодаря усилиям сообщества C1 появилась поддержка Razor в C1 без MVC в качестве стандартных C1-функций.
Сразу скажу, что создание Razor-функции отличается от создания той же XSLT-функции. Не используется графический редактор функций. (Вероятно, в будущем ситуация изменится.) А вот использование - такое же, как и любой другой функции в C1.
Итак, как же добавить поддержку Razor-функций в C1?
Для этого нужно установить пакет расширения Contribution.CompositeC1Contrib.RazorFunctions - прямо из админки C1. Пакет также доступен здесь - от автора.
После установки пакета вы можете создавать функции в папке ~/App_Data/Razor как .cshtml файлы по принципу "один файл - одна функция". Создавать можно в Visual Studio, например. C1 будет подхватывать добавления и изменения .cshtml файлов на лету.
Функции поддерживают входные параметры и по умолчанию возвращают значение типа XhtmlDocument. (Тип возвращаемого значения можно изменить.)
Они должны наследоваться от CompositeC1Contrib.RazorFunctions.CompositeC1WebPage, которая в свою очередь наследуется от System.Web.WebPages.WebPage. Благодаря этому у вас есть доступ к обычным helper-методам и свойствам (Html, Context, Layout, Page, PageData) , ну, и вообще, к .NET Framework'у. Однако не поддерживаются Model or Controllers потому, что это не MvcWebPage.
Благодаря наследованию от CompositeC1WebPage, есть также доступ к типам и т.п. в C1 через Composite.Data и к CurrentPageNode ("узел" текущей страницы).
После установки пакета, в папке ~/App_Data/Razor, появятся несколько .cshtml файлов в качестве примеров использования синтаксиса Razor и функционала C1.
Создание Razor-функции
- В папке ~/App_Data/Razor, создайте подпапки, которые будут служить пространством имен для вашей функции...
- ... и в подпапке - .cshtml файл, - выбрав для него имя, которое будет показываться при добавлении вашей Razor функции в интерфейсе пользователя.
То есть, если вы добавите функцию как ~/App_Data/Razor/My/Razor/Function.cshtml, то она будет доступна в админке как My.Razor.Function. - Если вы создаете .cshtml файл, используя шаблон из Visual Studio, то в нем будет указан тип документа <!DOCTYPE html>. Этот элемент нужно удалить!
- Добавьте наследование от старницы C1 вот так: @inherits CompositeC1Contrib.RazorFunctions.CompositeC1WebPage
- При использовании системы данных C1 укажите использование Composite.Data: @using Composite.Data
- И конечно добавьте ваш код.
Например:
@inherits CompositeC1Contrib.RazorFunctions.CompositeC1WebPage
@using Composite.Data;
<div id="Sitemap">
@NavigationTree(@HomePageNode.ChildPages, 5)
</div>
@helper NavigationTree(IEnumerable<PageNode> pages, int endRenderLevel)
{
if (pages.Any() && pages.First().Level <= endRenderLevel)
{
<ul class ="sitemapLevel@(pages.First().Level)">
@foreach (var subPage in pages)
{
if (!String.IsNullOrWhiteSpace(subPage.MenuTitle))
{
<li>
<a href="@(subPage.Url)">@subPage.MenuTitle</a>
@NavigationTree(subPage.ChildPages, endRenderLevel)
</li>
}
}
</ul>
}
}
После сохранения ваша функция станет доступна для выбора в окне для вставки функции, (например, при добавлении на страницу).
Далее мы рассмотрим, как добавлять входные параметры в Razor-функции и как изменить тип возвращаемого значения.
Комментариев нет:
Отправить комментарий