Pregunta

Estoy creando una lista desplegable personalizada con AJAX dropdownextender.Dentro de mi panel desplegable tengo botones de enlace para mis opciones.

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

Y esto funciona bien.Ahora lo que tengo que hacer es llenar dinámicamente esta lista desplegable.Aquí está mi mejor intento:

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

¡Mi problema es que no puedo hacer que el evento ejecute el script!Probé el código anterior y lo reemplacé.

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

con

lb.Click += new EventHandler(OnSelect);  

y también

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

Estoy probando las ramas con Alertas en el lado del cliente y no obtengo nada.

Editar:Me gustaría intentar agregar el ancla genérica pero creo que puedo agregar el elemento a un control asp.net.Tampoco puedo acceder a un div del lado del cliente desde el código del servidor para agregarlo de esa manera.Voy a tener que usar algún tipo de control con un evento.Mi función setDLL es la siguiente:

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

También acabo de sacar la variable de cadena en la llamada a la función (es decir,de

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

a

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

Solución

No estoy seguro de qué hace su método setDDL en su script, pero debería activarse si se hace clic en uno de los botones de enlace.Creo que sería mejor simplemente insertar un ancla html genérica en lugar de un botón de enlace .net, ya que no tendrá referencia al control en el lado del servidor.Luego podrá manejar el intercambio de datos con su método setDDL.Además, es posible que desee citar la cadena que está colocando dentro de la llamada a setDDL porque causará problemas con el script (como no llamar al método + errores de página) dado que está colocando datos de cadena literal sin comillas.

Otros consejos

Ok, usé Literales para crear etiquetas de anclaje con clics en ellas y parece estar funcionando muy bien.Muchas gracias.

El complemento probablemente debería verse así (agregue '' alrededor de la cadena y agregue un;hasta el final de la declaración de JavaScript).

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

¡O!

selecciona el Propiedad OnClientClick en el botón de enlace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top