2009-03-03 31 views
5

Parece que esta pregunta was addressed here, pero su solución no funcionó para mí. Estoy creando un sistema de menú desplegable dinámico que rellena una lista desplegable secundaria con los resultados de una consulta basada en el elemento seleccionado en el primer menú desplegable.DropDownList El valor de SelectedIndex no se actualiza en AutoPostback

primer desplegable conseguir poblada:

Dim db As New linqclassesDataContext 
Dim categories = (From c In db.faq_cats) 

NewFaqDropDownCategory.DataSource = categories 
NewFaqDropDownCategory.DataTextField = "category" 
NewFaqDropDownCategory.DataValueField = "category_id" 
NewFaqDropDownCategory.DataBind() 
Unset(categories) 
Unset(db) 

segundo desplegable conseguir poblada:

Protected Sub NewFaqDropDownCategory_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim temp As Integer = CInt(Val(NewFaqDropDownCategory.SelectedIndex)) 
    MsgBox(theDrop.SelectedValue) 
    Return 

    'Dim db As New linqclassesDataContext 
    'Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue) 

    'NewFaqDropDownList.DataSource = faqs 
    'NewFaqDropDownList.DataTextField = "question" 
    'NewFaqDropDownList.DataValueField = "id" 
    'NewFaqDropDownList.DataBind() 
    'NewFaqLabel.Visible = True 
    'NewFaqDropDownList.Visible = True 
    'Unset(faqs) 
    'Unset(db) 
End Sub 

El margen de beneficio por primera desplegable ...

<asp:DropDownList ID="NewFaqDropDownCategory" AutoPostBack="true" runat="server" OnSelectedIndexChanged="NewFaqDropDownCategory_SelectedIndexChanged"> 
</asp:DropDownList> 

Y el segundo ...

<asp:DropDownList ID="NewFaqDropDownList" runat="server" Visible="false"> 
</asp:DropDownList> 

No importa lo que haya intentado, siempre obtengo "1" (el valor del primer artículo en el segundo menú desplegable). La publicación a la que hice referencia anteriormente decía que esto tenía que ver con AutoPostBack y que el servidor no sabía que la lista se había actualizado todavía.

¿Alguien puede aclarar esto para mí un poco más?

Respuesta

8

Establezca un punto de interrupción en la línea que dice: NewFaqDropDownCategory.DataBind() y uno en su controlador de eventos (NewFaqDropDownDownCategory_SelectedIndexChanged). Sospecho que se llama al databind justo antes de que su evento NewFaqDropDownDownCategory_SelectedIndexChanged se dispare y haga que cambie su valor seleccionado.

Si es así, necesita asegurarse de que solo está conectado a datos si no se encuentra en medio de su autopostback o en lugar de utilizar NewFaqDropDownDownCategory.SelectedIndex en la primera línea de su controlador de eventos puede convertir el parámetro del remitente a DropDownList y usa su valor seleccionado.

+0

ah hah! tenías toda la razón Puse el descanso ahí, descubrí que en realidad se llamaba justo antes de que el evento se disparó. Envolví el DataBind en un condicional si no es page.ispostback, ¡y eso lo solucionó! ¡Gracias! – Anders

+2

Yay, mi SO virginity se pierde con mi primera respuesta aceptada :) – grenade

0

Creo que hay un error en su consulta LINQ para el segundo cuadro desplegable

Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue) 

Aquí está comparando SelectedValue a la categoría abajo. Sin embargo, en el primer cuadro combinado, dijiste que DataValueField debería ser category_id. Intente cambiar f.category por f.category_id

2

Tuve el mismo problema. Encontré Olvidé mirar si estaba publicando en la página o no y estaba vinculando mi control DropDownList en el evento Page_Load de la página. Me había olvidado de usar:

if (!IsPostBack) 
{ 
    .... do databind .... 
} 
Cuestiones relacionadas