среда, 14 августа 2013 г.

Razor в Composite C1 CMS 4.0 (9): Вызов других функций

В своих Razor-функциях вы можете вызывать другие C1-функции (независимо от их типа: Razor, XSLT, C# и т.п.).

А так как сам Razor позволяет смешивать разметку, т.е. HTML-код и собственно код, т.е. C# код, то и вызывать функции можно двумя способами, используя:
  • разметку для добавления функции (подобно XSLT)
  • вспомогательный метод @Function (подобно C#)
Давайте рассмотрим оба эти способа.


Использование разметки для добавления функции


По умолчанию возвращаемое значение Razor-функции - типа XhtmlDocument. Поэтому, как и в случае с XSLT-функциями, вы можете использовать разметку для добавления функции для выполнения C1-функции:

@inherits RazorFunction

@functions {
    public override string FunctionDescription
    {
        get  { return "Демо-функция, которая выполняет функцию Distributed Menu."; }
    }
}

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://www.composite.net/ns/function/1.0">
    <head>
    </head>
    <body>
    <f:function name="Composite.Navigation.Distributed" xmlns:f="http://www.composite.net/ns/function/1.0" >
        <f:param name="Level" value="1" />
        <f:param name="ShowParent" value="False" />
        <f:param name="ShowChildPages" value="True" />
        <f:param name="Expand" value="False" />
        <f:param name="NavigationId" value="NavigationSideBar" />
    </f:function>      
    </body>
</html>

Обратите внимание, что функция, добавленная таким способом, будет выполнятся, когда весь код разметки Razor-функции будет обрабатываться Composite C1.

Если же вам нужно выполнить функцию до того, как Razor-функция вернет результат, используйте следующий метод.


Использование вспомогательного метода @Function


Вспомогательный метод @Function дает вам возможность выполнить разные функции в Razor-функции до того, как она вернет результат.

Сам метод @Function имеет три перегруженных варианта:

public IHtmlString Function(string name);
public IHtmlString Function(string name, IDictionary<string, object> parameters);
public IHtmlString Function(string name, object parameters);

  • Первый параметр name должен содержать название функции (включая пространства имен).
  • Второй параметр parameters используется в перегруженных методах @Function, только если функция для выполнения имеет параметры. таким образом вы можете передать эти параметры: либо как object new {Param1=1, Param2=2}, либо как Dictionary <string, string> {"Param1", 1}, {"Param1", 2}}.
@inherits RazorFunction

@functions {
    public override string FunctionDescription
    {
        get  { return "Демо-функция, которая выполняет функцию Distributed Menu."; }
    }
}

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://www.composite.net/ns/function/1.0">
    <head>
    </head>
    <body>
        @Function("Composite.Navigation.Distributed", new {Level=1, ShowParent="False", ShowChildPages="True", Expand="False", NavigationId="NavigationSideBar"})
    </body>
</html>

Комментариев нет:

Отправить комментарий