Как поместить сторонний серверный элемент управления в пользовательский серверный элемент управления в ASP.Net? - PullRequest
2 голосов
/ 10 июля 2011

Я использую элементы управления Telerik ASP.Net Ajax (теоретически не должно иметь значения, кто контролирует сторонние устройства). Я хотел бы создать свой собственный серверный элемент управления (не пользовательский), который имеет собственный предопределенный вывод HTML, но также включает Telerik DatePicker. Поскольку Telerik DatePicker - это еще один серверный элемент управления , как правильно разместить серверный элемент управления в моем настраиваемом элементе управления сервером .

Насколько я понимаю, сервер контролирует работу, записывая вывод html. Как я могу записать выходные данные другого элемента управления, который я создаю в методе Render, и при этом сохранить индивидуальный жизненный цикл исходных элементов управления.

Желаемый результат:

  • Мой собственный серверный элемент управления, который содержит множество сторонних элементов управления (например, RadDatePicker).

Решение

Спасибо @Sumo за указание в направлении элемента управления Composite. Документация доступна здесь .

Мне удалось решить проблему, создав элемент управления, который наследует CompositeDataBoundControl. Затем связать данные с моим источником данных, вычислить, сколько нужно пользовательских элементов управления, поместить их в ArrayList и правильно создать их экземпляр (с собственным жизненным циклом в CreateChildControls()). Затем я смог отобразить каждый элемент управления в ArrayList из DatePicker в методе Render(), вызвав индекс ArrayList, который еще не отображался. Например. ((RadDatePicker)datePickerArray(instantiatedDatePickersCount)).RenderControl(writer).

На данный момент это грязное решение, но оно работает для моих целей тестирования.

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Вы хотите создать CompositeControl .Это позволяет легко добавлять HTML-разметку и элементы управления, используя переопределение CreateChildControls, и не нужно думать о чём-то другом.

Пример кода:

using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace TestServerControls {
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:GridWithHeader runat=server></{0}:GridWithHeader>")]
    public class GridWithHeader : CompositeControl {
        private readonly GridView _grid = new GridView();
        private readonly HtmlGenericControl _header = new HtmlGenericControl("h1");

        public string Text {
            get { return _header.InnerHtml; }
            set { _header.InnerHtml = value; }
        }

        protected override void CreateChildControls() {
            Controls.Add(_header);
            Controls.Add(_grid);
        }
    }
}
0 голосов
/ 10 июля 2011

Вы должны создать пользовательский элемент управления (файл ASCX), который может содержать другие вложенные элементы управления и разметку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...