2012-05-02 16 views
6

Tengo dos listas desplegables en mi form-ddl1 y ddl2. En conjunto, determinan la visibilidad de un cuadro de texto -txt1. Para que hago esta comprobación:ASP.NET - Control de devolución de lista desplegable programáticamente

if (ddl1.SelectedIndex==2 && ddl2.SelectedIndex>2) 
    { 
    if (!txt1.Visible) 
     {txt1.Visible=true;// And then I want to call postback} 

    } 
else 
    { 
    if (txt1.Visible) 
     {txt1.Visible=false;// And then I want to call postback} 
    } 

Como se puede ver, quiero publicar la página al servidor sólo si los condions anteriores son ciertas. El código anterior se activa en el evento SelectedIndexChanged de las dos listas desplegables. ¿Cómo puedo o puedo alcanzar una condición?

+0

No entiendo lo que quieres hacer - el formulario ya ha sido publicado después de volver el índice fue cambiado - ¿qué estás tratando de lograr? –

+0

He configurado el AutoPostBack en falso. Entonces, cuando cambio el índice, no se devuelve. –

+0

Correcto, ¿no es así que desea volver a enviar cada vez que cambia el índice, solo cuando se cumplen las condiciones anteriores? ¿Es eso correcto? –

Respuesta

6

No estoy seguro si entiendo su problema, pero desea para lograr la devolución de datos solo si se cumple determinada condición. puede conectar una función de javascript en ambos menús desplegables onchange = "return onchange();" Establecer Autopostback = verdadero;

 function Onchange() { 
     var ddl1 = document.getElementById('<%= ddl1.ClientID %>'); 
     var ddl2 = document.getElementById('<%= ddl2.ClientID %>'); 
     var txtbox = document.getElementById('<%= txtbox.ClientID %>'); 
     if (ddl1.selectedIndex == 2 && ddl2.selectedIndex > 2) { 
      txtbox.style.display = "inline"; 
      __doPostBack(ddl1, ''); 
     } 
     else { 
      txtbox.style.display = "none"; 
      return false; 
     } 
    } 

El código Aspx debería verse así.

<asp:DropDownList runat="server" AutoPostBack="true" ID="ddl1" onchange="return Onchange();" 
      OnSelectedIndexChanged="ddl1_SelectedIndexChanged"> 
      <asp:ListItem Text="text1" /> 
      <asp:ListItem Text="text2" /> 
      <asp:ListItem Text="text3" /> 
      <asp:ListItem Text="text4" /> 
     </asp:DropDownList> 
     <asp:DropDownList runat="server" AutoPostBack="true" ID="ddl2" onchange="return Onchange();" 
      OnSelectedIndexChanged="ddl1_SelectedIndexChanged"> 
      <asp:ListItem Text="text1" /> 
      <asp:ListItem Text="text2" /> 
      <asp:ListItem Text="text3" /> 
      <asp:ListItem Text="text4" /> 
     </asp:DropDownList> 
     <asp:TextBox runat="server" ID="txtbox" /> 

probé y funciona ...

+0

Gracias Kamran. Está bien por mí. –

1

Si AutoPostBack = True, que debería ser para que sus eventos se activen, solo llame a un funciton cuando se cumpla su condición. ASP.NET está publicando siempre hacia atrás, sólo tiene que manejar la situación, de lo contrario se tiene que manejar la validación con JavaScript y publicar manualmente la página:

if (ddl1.SelectedIndex==2 && ddl2.SelectedIndex>2) 
    { 
     if (!txt1.Visible) 
     { 
      txt1.Visible=true;// And then I want to call postback 
      //dowork 
     } 

    } 
    else 
    { 
     if (txt1.Visible) 
     { 
      txt1.Visible=false;// And then I want to call postback 
      //do work 
     } 
    } 
+0

Ahora me doy cuenta de que el evento SelectedIndexChanged es un evento del lado del servidor. Por lo tanto, se requiere la devolución de datos. Probablemente necesito JavaScript para hacer esto, pero no sé cómo. –

Cuestiones relacionadas