Tengo un ListBox al que agrego ListItems en un código subyacente. El problema que estoy teniendo es que ListBox no está viendo los elementos seleccionados. Tengo el ListBox poblado dinámicamente según lo que el usuario seleccione de DropDownList, por lo que DropDownList tiene AutoPostBack establecido en verdadero. Creo que esto de alguna manera está causando el problema.ListBox no está recibiendo elementos seleccionados
Mi método SelectedIndexChanged
, que se usa cada vez que se selecciona un elemento en DropDownList, llama a un método llamado PopulateListBox
. Esto es lo que se ve esos métodos como:
protected void SelectedIndexChanged(object sender, EventArgs e)
{
string typeStr = type.SelectedItem.Text;
MyType = Api.GetType(typeStr);
PopulateListBox();
}
private void PopulateListBox()
{
listbox.Items.Clear();
foreach (PropertyInfo info in MyType.GetProperties())
listbox.Items.Add(new ListItem(info.Name));
}
Por lo que vale la pena, que aquí son los DropDownList y ListBox:
<asp:DropDownList runat="server" ID="type" width="281px" OnSelectedIndexChanged="SelectedIndexChanged" AutoPostBack="true" />
<asp:ListBox runat="server" ID="listbox" width="281px" height="200px" selectionmode="Multiple" />
Lo que estoy tratando de hacer es añadir una lista de cadenas (siendo el seleccionadas elementos) como una variable de sesión al hacer clic en un botón de enviar. El botón redirige a una nueva página después de que la Lista se haya agregado a la sesión. Pasando por el depurador, la Lista de cadenas está vacía en el punto donde la agrego a la sesión.
listbox.GetSelectedIndices()
no devuelve nada.
actualización
que puede acceder a los elementos seleccionados si no hago un cambio en el DropDownList. El ListBox se rellena inicialmente en la carga de página, y si realizo selecciones, se reconocen. Si selecciono algo de DropDownList y ListBox se vuelve a llenar, las selecciones no se reconocen.
Mi método Page_Load
hace solo dos cosas. Se inicializa mi variable de Api y llama PopulateDropDown
, que se ve así:
private void PopulateDropDown()
{
foreach (Type t in Api.GetAllTypes())
type.Items.Add(new ListItem(t.Name));
string typeStr = type.Items[0].Text;
Type = Api.GetType(typeStr);
PopulateListBox();
}
¿Pero cuándo no puede ver los elementos seleccionados en el cuadro de lista? Al cambiar la selección en la lista desplegable? ¿O tienes algún otro control que realice una devolución de datos? – dzendras
@dzendras: actualicé la publicación al final con respecto a esto. –
¿Cuándo accede al cuadro de lista? PageLoad? Compruebe si el lugar al que accede es correcto de acuerdo con el ciclo de vida de la página ASP.NET (en las primeras etapas de procesamiento, los controles de solicitud no tienen sus propiedades establecidas). También verifique si no está borrando el listbox anteriormente en el ciclo de vida de la página. – dzendras