Я хочу создать настраиваемый шаблонный элемент управления, который будет получать элементы управления внутри шаблона (страница похожа на панель обновления). Итак, вопрос более подробно.
Элемент управления должен выглядеть следующим образом:
<ec:TabControl runat="server" ID="tab">
<Tabs>
<ec:Tab runat="server">
<TabContainer>
<asp:Button runat="server" Text="aaaaaa" />
</TabContainer>
<TabName>
text or controls
</TabName>
</ec:Tab>
<ec:Tab runat="server">
<TabContainer>
<asp:Button runat="server" Text="vcxvxvxv" />
</TabContainer>
<TabName>
some text
</TabName>
</ec:Tab>
</Tabs>
</ec:TabControl>
Работает хорошо, так как работает контроль с привязкой к данным. Другими словами, на этапе привязки к данным все элементы управления внутри и шаблоны создаются соответствующим образом.
Но я хочу иметь доступ к элементам управления внутри и непосредственно со страницы (по идентификатору). Например, вы можете сделать это с помощью панели обновления (содержимое доступно в пределах области страницы).
Ниже вы можете увидеть фрагмент исходного кода элемента управления:
public class Tab
{
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(HtmlAnchorContainer))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate TabName { get; set; }
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(PanelContainer))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate TabContainer { get; set; }
}
public class TabControl : System.Web.UI.WebControls.WebControl
{
List<Tab> tabs;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerProperty),
NotifyParentProperty(true)]
public List<Tab> Tabs
{
get { return tabs ?? new List<Tab>(); }
set { tabs = value; }
}
protected override void CreateChildControls()
{
base.CreateChildControls();
.....
foreach (Tab tabItem in Tabs)
{
//generating tree control for further rendering
}
...
}
protected override void OnDataBinding(EventArgs e)
{
EnsureChildControls();
base.OnDataBinding(e);
}
}
Надеюсь на ваши советы, рекомендации, ссылки и конструктивную критику.))