Загрузить шаблон из пользовательского элемента управления - PullRequest
1 голос
/ 30 сентября 2010

Я работаю с Sitefinity, и я разрабатываю конструктор элементов управления - однако я не думаю, что мой вопрос относится к SiteFinity.

У меня есть такой класс:

открытый класс CaseStudyFeaturedItem: CaseStudySelectorControlDEsignerBase

Класс, от которого он наследует, сам наследует от UserControl, вот так:

открытый класс CaseStudySelectorControlDesignerBase: System.Web.UI.UserControl {

В CaseStudyFeaturedItem возможно ли загрузить шаблон, который является встроенным ресурсом, и затем получить доступ к элементам управления этого элемента управления?

По сути, у меня есть usercontrol.ascx, который является встроенным ресурсом, поэтому имеет строку вроде:

mynamespace.myclass.usercontrol.ascx;

И изнутри CaseStudyFeaturedItem я хочу иметь возможность загрузить этот пользовательский элемент управления и затем изменить элементы управления (т.е. литералы / метки), которые в нем находятся?

Возможно ли это?

Спасибо Al

Ответы [ 2 ]

0 голосов
/ 01 октября 2010

Мы делаем это с каждым элементом управления в Sitefinity, но это будет немного сложно сделать с вашими собственными элементами управления (я предполагаю, что вы используете Sitefinity 3.7).Шаги следующие:
- Реализация элемента управления контейнера шаблона, унаследованного от GenericContainer :

protected class ItemListContainer : GenericContainer
{
    public virtual Repeater RepeaterControl
    {
        get { return base.GetControl<Repeater>("repeater", true); }
    }
}

- Вам необходимо получить шаблон из ресурса (используйте метод ControlUtils.GetTemplate - Sitefinity сделает это за вас):

public virtual ITemplate ItemListTemplate
{
    get
    {
        if (itemListTemplate == null)
            itemListTemplate = ControlUtils.GetTemplate(<virtual path to template>, <resource file name>,
                <type to determine assembly for template>);
        return itemListTemplate;
    }
    set
    {
        itemListTemplate = value;
    }
}

- Вам необходимо вызвать метод шаблона InstantiateIn и передать ему управление контейнером

listContainer = new ItemListContainer();
ItemListTemplate.InstantiateIn(listContainer);

- Доступ ко всем элементам управления через контейнер

listContainer.RepeaterControl.DataBind();

В Sitefinity 4.0 мы включили базовый класс для всех элементов управления, который предоставит вам эту функциональность изкоробка.Однако в 3.7 вам придется делать все это вручную.

Класс ControlUtils находится в пространстве имен Telerik.Framework.Web.Приведенный выше код показывает, как все это делается в элементе управления ContentView, и вам, вероятно, следует внести небольшие изменения в зависимости от вашего случая.

Cheers,
Slavo
Команда Sitefinity @ Telerik

0 голосов
/ 30 сентября 2010

Да, это возможно, но я не совсем уверен, что вы пытаетесь достичь, основываясь на вашем вопросе.Вы можете использовать LoadControl для динамической загрузки пользовательских элементов управления.Если вы приведете результат к соответствующему типу элемента управления, у вас будет доступ ко всем его свойствам.Оттуда вы можете добавить его в любой контейнер, в котором хотите его хранить.Это то, что вы пытаетесь сделать?

...