Вы уже знаете о C1-функциях и о том, что написать их можно используя различные технологии. А для их пользователей эти технологии не имеют значения: пользователи будут работать с ними как с единообразными C1-функциями.
4 вида C1-функций (визуальные, XSLT, C# и SQL) поддерживаются самой системой. А недавно, усилиями сообщества Composite C1, была добавлена поддержка 5-го вида функций - Razor-функций - в виде пакета расширения.
И вот опять, усилиями сообщества Composite C1 добавлена поддрежка 6-го вида функций - функций пользовательских элементов управления ASP.NET (ASP.NET User Control Functions).
В двух словах: вы можете создать свой элемент управления - и Composite С1 признает в нем обычную C1-функцию, и ее можно будет вставлять в контент или разметку страницы как обычно. (Конечно, существует и традиционный способ вставки такого элемента управления - через функцию Composite.AspNet.LoadUserControl.)
Самое замечательное здесь то, что у таких функций могут быть параметры.
Создаются функции пользовательских элементов управления ASP.NET подобно Razor-функциям, и подобно им же - нужно установить специальный пакет расширения для поддрежки этого вида функций.
Итак,
4 вида C1-функций (визуальные, XSLT, C# и SQL) поддерживаются самой системой. А недавно, усилиями сообщества Composite C1, была добавлена поддержка 5-го вида функций - Razor-функций - в виде пакета расширения.
И вот опять, усилиями сообщества Composite C1 добавлена поддрежка 6-го вида функций - функций пользовательских элементов управления ASP.NET (ASP.NET User Control Functions).
В двух словах: вы можете создать свой элемент управления - и Composite С1 признает в нем обычную C1-функцию, и ее можно будет вставлять в контент или разметку страницы как обычно. (Конечно, существует и традиционный способ вставки такого элемента управления - через функцию Composite.AspNet.LoadUserControl.)
Самое замечательное здесь то, что у таких функций могут быть параметры.
Создаются функции пользовательских элементов управления ASP.NET подобно Razor-функциям, и подобно им же - нужно установить специальный пакет расширения для поддрежки этого вида функций.
Итак,
- В админке, устанавливаем пакет Contribution.CompositeC1Contrib.UserControlFunctions (Система / Пакеты / Доступные пакеты).
- После установки пакета в папке ~/App_Data/UserControl, создаем подпапку/подпапки, которые будут служить именами пространств для наших элементов управления-функций.
- И уже в нужной подпапке создаем свой элемент управления (.ascx), например в Visual Studio.
Таким образом если вы создадите свой элемент управления по такому пути на сайте:
~/App_Data/UserControl/My/Controls/Calendar.ascx
... он станет C1-функцией My.Controls.Calendar.
Параметры
Как я уже говорил у таких функций могут быть параметры. Пареметр добавляется путем объявления публичного свойства в соответсвующем .ascx.cs. Используя атрибуты, можно указать подпись (ярлык), текст справки и значение по умолчанию для такого параметра:
А также можно явно указать какой виджет использовать для параметра:
Скорее всего код функции на странице нужно будет "заворачивать" в элемент <asp:form/>, чтобы избежать ошибок с элементами управления, которые не помещены в элемент <form/>:
[FunctionParameter("Имя" , "Имя клиента" , "Вася Пупкин")]
public string Name
{
get;
set;
}
public string Name
{
get;
set;
}
А также можно явно указать какой виджет использовать для параметра:
[FunctionParameter("Адрес" , "Почтовый адрес клиента",
WidgetMarkup = "<f:widgetfunction xmlns:f='http://www.composite.net/ns/function/1.0' name='Composite.Widgets.String.TextArea' label='' bindingsourcename=''><f:helpdefinition xmlns:f='http://www.composite.net/ns/function/1.0' helptext='' /></f:widgetfunction>")]
public string Address
{
get;
set;
}
WidgetMarkup = "<f:widgetfunction xmlns:f='http://www.composite.net/ns/function/1.0' name='Composite.Widgets.String.TextArea' label='' bindingsourcename=''><f:helpdefinition xmlns:f='http://www.composite.net/ns/function/1.0' helptext='' /></f:widgetfunction>")]
public string Address
{
get;
set;
}
Скорее всего код функции на странице нужно будет "заворачивать" в элемент <asp:form/>, чтобы избежать ошибок с элементами управления, которые не помещены в элемент <form/>:
<asp:form xmlns:asp="http://www.composite.net/ns/asp.net/controls">
<!-- что то еще -->
<f:function name="My.Controls.Calendar" xmlns:f="http://www.composite.net/ns/function/1.0">
<f:param name="CurrentDate" value="2012-01-31" />
</f:function>
<!-- что то еще -->
</asp:form>
Комментариев нет:
Отправить комментарий