Pergunta

Estou criando uma queda personalizado lista com AJAX dropdownextender para baixo. Dentro do meu painel de queda Eu tenho linkbuttons para as minhas opções.

<asp:Label ID="ddl_Remit" runat="server" Text="Select remit address."
    Style="display: block; width: 300px; padding:2px; padding-right: 50px; font-family: Tahoma; font-size: 11px;" />
<asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display :none; visibility: hidden;">
    <asp:LinkButton runat="server" ID="Option1z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />
    <asp:LinkButton runat="server" ID="Option2z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />
    <asp:LinkButton runat="server" ID="Option3z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />-->
</asp:Panel>
<ajaxToolkit:DropDownExtender runat="server" ID="DDE"
    TargetControlID="ddl_Remit"
    DropDownControlID="DropPanel" />

E isso funciona bem. Agora, o que eu tenho que fazer é dinamicamente preencher esta dropdownlist. Aqui é a minha melhor tentativa:

private void fillRemitDDL()
{
    //LinkButton Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem"

    DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter ta = new DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter();
    DataTable dt = (DataTable)ta.GetData(int.Parse(this.SLID));
    if (dt.Rows.Count > 0)
    {
        Panel ddl = this.FindControl("DropPanel") as Panel;
        ddl.Controls.Clear();
        for (int x = 0; x < dt.Rows.Count; x++)
        {
            LinkButton lb = new LinkButton();
            lb.Text = dt.Rows[x]["Remit3"].ToString().Trim() + "<br />" + dt.Rows[x]["Remit4"].ToString().Trim() + "<br />" + dt.Rows[x]["RemitZip"].ToString().Trim();
            lb.CssClass = "ContextMenuItem";
            lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
            ddl.Controls.Add(lb);
        }
    }
}

O meu problema é que eu não posso começar o evento para o script run! Eu tentei o código acima, bem como a substituição

lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");  

com

lb.Click += new EventHandler(OnSelect);  

e também

lb.OnClientClick = "setDDL(" + lb.Text + ")");

Estou testando os ramos com alertas no lado do cliente e não receber nada.

Edit: Gostaria de tentar adicionar a âncora genérica, mas eu acho que posso adicionar o elemento a um controle asp.net. Nem posso acessar um div do lado do cliente a partir do código do servidor para adicioná-lo dessa forma. Vou ter que usar algum tipo de controle com um evento. Minha função setDLL é o seguinte:

function setDDL(var)
{
    alert(var);
    document.getElementById('ctl00_ContentPlaceHolder1_Scanline1_ddl_Remit').innerText = var;
}

Também eu só tirou a variável de cadeia na chamada de função (ou seja, a partir

lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");   

para

lb.Attributes.Add("onclick", "setDDL()");
Foi útil?

Solução

Eu não tenho certeza do que seu método setDDL faz em seu script, mas deve disparar, se um dos botões de link é clicado. Eu acho que você pode ser melhor fora apenas inserir uma âncora html genérico que em vez de um .net linkbutton como você não terá nenhuma referência ao controle no lado do servidor. Em seguida, você pode manipular o excahnge dados com o método setDDL. Além disso, você pode querer citar a seqüência que você está colocando dentro da chamada para setDDL porque vai causar problemas de script (como não chamar os erros método + página), dado que você está colocando dados de cadeia literal sem aspas.

Outras dicas

Ok, eu usei literais para criar marcas de âncora com onclicks sobre eles e que parece estar funcionando muito bem. Muito obrigado.

o suplemento provavelmente deve olhar como este (adicione o '' em torno da corda e adicionar um, para o fim da instrução javascript).

lb.Attributes.Add("onclick", "setDDL('" + lb.Text + "');");

OR!

OnClientClick propriedade sobre o linkbutton.

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