В своих Razor-функциях вы можете вызывать другие C1-функции (независимо от их типа: Razor, XSLT, C# и т.п.).
А так как сам Razor позволяет смешивать разметку, т.е. HTML-код и собственно код, т.е. C# код, то и вызывать функции можно двумя способами, используя:
По умолчанию возвращаемое значение Razor-функции - типа XhtmlDocument. Поэтому, как и в случае с XSLT-функциями, вы можете использовать разметку для добавления функции для выполнения C1-функции:
Обратите внимание, что функция, добавленная таким способом, будет выполнятся, когда весь код разметки Razor-функции будет обрабатываться Composite C1.
Если же вам нужно выполнить функцию до того, как Razor-функция вернет результат, используйте следующий метод.
Вспомогательный метод @Function дает вам возможность выполнить разные функции в Razor-функции до того, как она вернет результат.
Сам метод @Function имеет три перегруженных варианта:
А так как сам 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>
@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);
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>
@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>
Комментариев нет:
Отправить комментарий