пятница, 31 декабря 2010 г.

Использование параметров для элементов управления ASP.NET в C1

В одном из предыдущих сообщений, я писал о том, как можно добавлять пользовательские элементы управления ASP.NET (ASP.NET User Control) на страницу.

А можно ли управлять поведением такого элемента при помощи параметров?

Я расскажу, как это можно сделать, отталкиваясь от информации, которую я узнал из FAQ'а С1.


Подход, который там предлагается, заключается в следующем:
  1. Вам необходимо создать т.н. "фабричный" метод, который будет возвращать нужный вам элемент управления. Этот метод будет иметь входные параметры (то, что нам нужно) и, используя их значения, правильно инициализировать элемент управления.
  2. Чтобы использовать этот "фабричный" метод, его нужно будет просто добавить в C1 как внешнюю C# функцию, и далее использовать на страницах, шаблонах и т.п.
Давайте это и сделаем.
  • Создадим "фабричный" метод GetCalendar, который будет возвращать элемент управления "календарь" с выбранной датой, передаваемой через входной параметр метода selectedDate:
  1. Открываем сайт в Visual Studio.
  2. В папку App_Code в корневой папке сайта добавляем класс, скажем, Demo.AspNetControlFactory.cs
  3. Заменяем содержимое файла класса на такой код:

    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Composite.Functions;

    namespace Demo
    {
      public class AspNetControlFactory
      {
        [FunctionParameterDescription("selectedDate", "Selected Date", "The date to pre-select", null)]
        public static Control GetCalendar(DateTime selectedDate)
        {
          if (selectedDate == DateTime.MinValue) 
            selectedDate = DateTime.Today;

          Calendar calendar = new Calendar();
          calendar.SelectedDate = selectedDate;
          calendar.VisibleDate = selectedDate;

          return calendar;
        }
      }
    }

  4. Сохраняем файл (File | Save).
  • Теперь добавим метод GetCalendar как внешнюю C# функцию в С1:
  1. Запускаем сайт по F5 и заходим в админ. консоль как администратор.
  2. В разделе "Функции" (Functions), выбираем узел C# Functions и нажимаем кнопку Add External C# Function.
  3. В мастере, в поле Type набираем Demo.AspNetControlFactory и нажимаем кнопку Next. Если мы все сделали правильно, то в списке Method name появится наш метод GetCalendar.
  4. Выбираем метод GetCalendar в списке и нажимаем Next.
  5. В следующем окне мастера, нажимаем Finish, принимая предложенный вариант названия C# функции (Demo.AspNetControlFactory).
  • И наконец, используем нашу функцию Demo.AspNetControlFactory на странице сайта.
  1. В разделе "Контент" (Content) редактируем нужную нам страницу и на вкладке "Контент" (Content) страницы переключаемся в редактор кода (Source).
  2. Вставляем элемент <asp:form></asp:form> в разметку страницы:

    <asp:form xmlns:asp="http://www.composite.net/ns/asp.net/controls">
      <!-- код функции -->
    </asp:form>

  3. Cтавим курсор между тегами и вызываем окно выбора функций (Insert | Function Markup).
  4. Раскрываем All Functions | Demo и выбираем функцию GetCalendar и нажимаем OK.
  5. В окне свойств функции, выбираем параметр Selected Date, меняем тип параметра (Parameter Type) на Constant 
  6. В значении параметра (Parameter Value) устанавливаем нужную нам дату, например, 01.04.2011.
  7. Нажимаем ОК и сохраняем изменения на странице (Save).
  8. Предварительно просматриваем страницу (вкладка Preview).
Наш календарь должен появится на странице с выбранной датой.

Важно! Те, кто используют Internet Explorer не смогут добавить функцию указанным выше способом (Insert | Function Markup). Вместо этого, нужно просто добавить XML код этой функции прямо в код страницы вот так (не забыв поместить его между тегами <asp:form></asp:form>:

<asp:form xmlns:asp="http://www.composite.net/ns/asp.net/controls">
  <f:function xmlns:f="http://www.composite.net/ns/function/1.0" name="Demo.GetCalendar">
    <f:param name="selectedDate" value="2011-04-01T00:00:00+03:00" />
  </f:function>
</asp:form>

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

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