Pergunta

Estou tentando escrever um extensor de controle AJAX que possa modificar um kit de ferramentas de controle AJAX TabPanel para que o TabPanelO cabeçalho do tem uma imagem após o texto que, quando clicado, oculta o cabeçalho da guia usando script do lado do cliente (sem postback).Eu também gostaria de poder especificar uma função onClientClose que também é chamada quando uma guia é fechada.

Sou novo em extensores de controle ASP e até agora segui o [tutorial](http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs"Criando um Extensor de Controle do Kit de Ferramentas de Controle AJAX Personalizado") no site ASP.NET para criar um extensor personalizado.Eu chamei meu extensor de ClosableTabPanelExtender, e meu projeto extensor é compilado.Eu configurei uma página da web de teste assim:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
<asp:TabContainer ID="TabContainer1" runat="server">
    <asp:TabPanel ID="TabPanel0" runat="server">
        <HeaderTemplate>Tab 0</HeaderTemplate>
        <ContentTemplate>Hello!</ContentTemplate>
    </asp:TabPanel>
    <asp:TabPanel ID="TabPanel1" runat="server">
        <HeaderTemplate>Tab 1</HeaderTemplate>
        <ContentTemplate>Goodbye!</ContentTemplate>
    </asp:TabPanel>
</asp:TabContainer>
<cc1:ClosableTabPanelExtender ID="ClosableTabPanelExtender1" runat="server" 
    TargetControlID="TabPanel1" />

Até agora, estou recebendo o seguinte erro ao executar o site:
The TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.
O erro me faz pensar que um TabPanel não pode ser prorrogado, então terei que prorrogar o TabContainer em vez de?

Além do erro, eu poderia usar algumas orientações, especialmente com o script Behavior.É a parte mais elusiva para mim, embora eu saiba que provavelmente abrigará a maior parte das funcionalidades que estou tentando adicionar.Também não tenho certeza de como as outras partes do extensor funcionam juntas.

Eu tenho o código-fonte do Ajax Toolkit e procurei na fonte os controles Tab, que entendo parcialmente.Também examinei vários exemplos de extensores de controle, principalmente Extensores de Matt Berseth e um de Dan Wahlin.

Foi útil?

Solução

Finalmente descobri o que precisava fazer.Para quem estiver interessado na solução:

  • Para estender o controle TabPanel, tive que contornar o erro que postei substituindo o OnResolveControlID método no código do servidor do meu extensor (ClosableTabPanelExtender.cs).

    protected override void OnResolveControlID(ResolveControlEventArgs e)
    {
        // Get a reference to the outermost TabContainer that contains the TabPanel being extended.
        TabContainer tabContainer = (TabContainer)base.FindControl(OuterTabPanelID);
        if (tabContainer != null)
        {
            // Check to see if any of the tabs are the control we are looking form.
            foreach (TabPanel tab in tabContainer.Tabs)
            {
                if (tab.ID == e.ControlID)
                {
                    e.Control = tab;
                    return;
                }
            }
            // If none of the tabs are what we are looking for, search the contents of each tab.
            foreach (TabPanel tab in tabContainer.Tabs)
            {
                Control ctrl = tab.FindControl(e.ControlID);
                if (ctrl != null)
                    return;
            }
        }
    }
    
  • Quanto ao script de comportamento do lado do cliente do extensor (e a interação entre o servidor e o código do cliente, os artigos listados em esta página do MSDN são úteis e pouparão muitos problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top