вторник, 31 января 2012 г.

Функции пользовательских элементов управления ASP.NET

Вы уже знаете о 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-функциям, и подобно им же - нужно установить специальный пакет расширения для поддрежки этого вида функций.

Итак,
  1. В админке, устанавливаем пакет Contribution.CompositeC1Contrib.UserControlFunctions (Система / Пакеты / Доступные пакеты).
  2. После установки пакета в папке  ~/App_Data/UserControl, создаем подпапку/подпапки, которые будут служить именами пространств для наших элементов управления-функций.
  3. И уже  в нужной подпапке создаем свой элемент управления (.ascx), например в Visual Studio.
Таким образом если вы создадите свой элемент управления по такому пути на сайте:
~/App_Data/UserControl/My/Controls/Calendar.ascx
... он станет C1-функцией My.Controls.Calendar.

Параметры

Как я уже говорил у таких функций могут быть параметры. Пареметр добавляется путем объявления публичного свойства в соответсвующем .ascx.cs. Используя атрибуты,  можно указать подпись (ярлык), текст справки и значение по умолчанию для такого параметра:

[FunctionParameter("Имя" , "Имя клиента" , "Вася Пупкин")]
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;
}

Скорее всего код функции на странице нужно будет "заворачивать" в элемент <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>

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

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