Как: использовать AJAX в настраиваемом серверном элементе управления ASP.NET

Кто-нибудь знает хороший учебник, демонстрирующий использование существующего расширителя элементов управления AJAX в настраиваемом серверном элементе управления ASP.NET?

Я не хочу создавать «Пользовательский серверный элемент управления AJAX». Я хочу создать настраиваемый серверный элемент управления, который использует существующий расширитель элемента управления AJAX.

Я хотел бы объединить asp: TextBox, asp: ImageButton, asp: CustomValidator (с javascript на стороне клиента из встроенного ресурса) и ajax: CalendarExtender в один настраиваемый серверный элемент управления. Или это уже было создано?

Любая помощь будет принята с благодарностью. Спасибо.

ОБНОВЛЕНИЕ: В принципе, я хотел бы создать CompositeControl с дочерним элементом управления ajax: CalendarExtender.

Ответов (3)

Скорее всего, вы хотите создать пользовательский элемент управления, а не настраиваемый элемент управления. Пользовательский элемент управления - это составной элемент управления, тогда как пользовательский элемент управления - это элемент управления, созданный с нуля или унаследованный от базового элемента управления.

Я предлагаю вам поискать в MSDN. Я видел несколько хороших статей на эту тему в их журналах за последние год или два, и они были довольно обстоятельными. Но у меня нет на них ссылок и мне лень для вас гуглить. : \

Похоже, вам нужен составной элемент управления. Они очень похожи на пользовательские элементы управления, только вместо использования файла ascx для создания элементов управления, которые вы создаете программно. Большим преимуществом этого перед использованием пользовательского элемента управления является то, что в итоге вы получаете что-то, что можно вставить в сборку и использовать в разных проектах.

Составной элемент управления может наследовать либо от Control, либо от WebControl. Я лично обычно считаю Control более полезным для наследования, потому что мне обычно не нужно много дополнительных вещей, которые вы получаете от WebControl, таких как свойства стиля, поскольку я обычно просто использую одно свойство CssClass.

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

Самое важное, что нужно сделать при создании составного элемента управления, - это переопределить метод CreateChildControls элемента управления. Здесь должна содержаться вся логика для фактического создания элементов управления. Платформа автоматически гарантирует, что это будет вызвано в нужное время в жизненном цикле страницы.

Вот небольшой пример:

public class MyCompositeControl : Control, INamingContainer
{
    protected override void CreateChildControls()
    {
        Controls.Clear();

        var textbox = new TextBox();
        textbox.ID = "TextBox1";
        Controls.Add(textbox);
        if (!Page.IsPostBack || !IsTrackingViewState)
        {
            // make sure you set the properties after
            // you add it to the parent or the viewstate
            // won't save properly
            textbox.MaxLength = 30;
        }

        var button = new Button();
        button.ID = "Button1";
        Controls.Add(button);
        if (!Page.IsPostBack || !IsTrackingViewState)
        {
            button.Text = "Save";
        }
    }
}

Я не думаю, что ASP.NET AJAX должен так сильно усложнять. Единственное, о чем я могу думать, это то, что вам нужно убедиться, что вы создали ScriptManager на любой странице, на которую будет добавлен составной элемент управления.

Там есть полный пример этого на сайте MSDN. В этом блоге есть еще один хороший пример .