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