Question

Je crée une liste déroulante personnalisée avec AJAX dropdownextender. Dans mon panneau de largage, j'ai des boutons de liens pour mes options.

<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" />

Et ça marche bien. Maintenant, ce que je dois faire est de remplir dynamiquement cette liste déroulante. Voici ma meilleure tentative:

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

Mon problème est que je ne peux pas obtenir l'événement pour exécuter un script! J'ai essayé le code ci-dessus et remplacé

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

avec

lb.Click += new EventHandler(OnSelect);  

et aussi

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

Je teste les branches avec des alertes côté client sans rien obtenir.

Modifier: J'aimerais essayer d'ajouter l'ancre générique mais je pense pouvoir ajouter l'élément à un contrôle asp.net. Je ne peux pas non plus accéder à une division côté client du code serveur pour l'ajouter de cette façon. Je vais devoir utiliser une sorte de contrôle avec un événement. Ma fonction setDLL est la suivante:

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

En outre, je viens de sortir la variable de chaîne dans l'appel de fonction (c'est-à-dire de

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

à

lb.Attributes.Add("onclick", "setDDL()");
Était-ce utile?

La solution

Je ne sais pas ce que votre méthode setDDL fait dans votre script, mais elle devrait se déclencher si vous cliquez sur l'un des boutons de lien. Je pense que vous feriez mieux de simplement insérer une ancre html générique au lieu d’un lien .net car vous n’auriez aucune référence au contrôle côté serveur. Ensuite, vous pouvez gérer l’échange de données avec votre méthode setDDL. De plus, vous voudrez peut-être citer la chaîne que vous placez dans l'appel à setDDL car des problèmes de script (tels que le fait de ne pas appeler la méthode et les erreurs de page) seront générés étant donné que vous placez des données de chaîne littérale sans guillemets.

Autres conseils

D'accord, j'ai utilisé Literals pour créer des balises d'ancrage avec onclicks, ce qui semble bien fonctionner. Merci beaucoup.

L’ajout devrait ressembler à ceci (ajoutez le '' autour de la chaîne et ajoutez un; à la fin de l’instruction javascript).

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

OU!

définir la propriété OnClientClick"> propriété OnClientClick sur le lien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top