создание настраиваемого шаблонного элемента управления в asp.net - PullRequest
0 голосов
/ 29 января 2012

Я хочу создать настраиваемый шаблонный элемент управления, который будет получать элементы управления внутри шаблона (страница похожа на панель обновления). Итак, вопрос более подробно. Элемент управления должен выглядеть следующим образом:

<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);
    }
 }

Надеюсь на ваши советы, рекомендации, ссылки и конструктивную критику.))

1 Ответ

0 голосов
/ 29 января 2012

Примените объявление:

[TemplateInstance(TemplateInstance.Single)]

к своим шаблонам, где вы хотите напрямую ссылаться на элемент управления, тогда это должно быть решено.

...