Domanda

Sto creando un elenco a discesa personalizzato con AJAX dropdownextender.All'interno del mio pannello a discesa ho pulsanti di collegamento per le mie opzioni.

<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 questo funziona bene.Ora quello che devo fare è riempire dinamicamente questo elenco a discesa.Ecco il mio miglior tentativo:

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

Il mio problema è che non riesco a far eseguire lo script all'evento!Ho provato il codice sopra e anche la sostituzione

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

con

lb.Click += new EventHandler(OnSelect);  

e anche

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

Sto testando i rami con avvisi sul lato client e non ottengo nulla.

Modificare:Vorrei provare ad aggiungere l'ancoraggio generico ma penso di poter aggiungere l'elemento a un controllo asp.net.Né posso accedere a un div lato client dal codice server per aggiungerlo in questo modo.Dovrò usare una sorta di controllo con un evento.La mia funzione setDLL è la seguente:

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

Inoltre ho appena eliminato la variabile stringa nella chiamata di funzione (cioèda

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

A

lb.Attributes.Add("onclick", "setDDL()");
È stato utile?

Soluzione

Non sono sicuro di cosa faccia il tuo metodo setDDL nel tuo script, ma dovrebbe attivarsi se si fa clic su uno dei pulsanti di collegamento.Penso che potresti stare meglio semplicemente inserendo un ancoraggio html generico invece di un pulsante di collegamento .net poiché non avrai alcun riferimento al controllo sul lato server.Quindi puoi gestire lo scambio di dati con il tuo metodo setDDL.Inoltre potresti voler citare la stringa che stai inserendo all'interno della chiamata a setDDL perché causerà problemi di script (come non chiamare il metodo + errori di pagina) dato che stai inserendo dati di stringa letterali senza virgolette.

Altri suggerimenti

Ok, ho usato i Literals per creare tag di ancoraggio con onclicks su di essi e sembra funzionare benissimo.Molte grazie.

l'aggiunta dovrebbe probabilmente assomigliare a questa (aggiungi '' attorno alla stringa e aggiungi un ;alla fine dell'istruzione javascript).

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

O!

impostare il Proprietà OnClientClick sul pulsante di collegamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top