2012-05-02 15 views
6

Ho due elenchi a discesa sul mio form-ddl1 e ddl2. Insieme determinano la visibilità di una casella di testo -txt1. Per quello che faccio questo controllo:ASP.NET - Controlback postback droplistlist programmato

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

Come potete vedere, voglio inviare la pagina per server solo se i condions di cui sopra sono vere. Il codice precedente viene attivato sull'evento SelectedIndexChanged di entrambe le liste a discesa. Come posso o è possibile raggiungere una condizione?

+0

non capisco che cosa si vuole fare - il modulo è già stato inviato indietro dopo l'indice è stato cambiato - che cosa stai cercando di raggiungere? –

+0

Ho impostato AutoPostBack su false. Quindi, quando cambio l'indice non fa il postback. –

+0

OK OK, quindi non si desidera postback ogni volta che l'indice cambia, solo quando vengono soddisfatte le condizioni di cui sopra? è corretto? –

risposta

6

Io non sono sicuro se ho capito il tuo problema, ma si vuole per ottenere il postback solo se sono soddisfatte determinate condizioni. puoi collegare una funzione javascript su entrambi i menu a discesa onchange = "return onchange();" Set Autopostback = true;

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

Il codice Aspx dovrebbe apparire come questo.

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

testato e funziona ...

+0

Grazie Kamran. Va bene per me. –

1

Se AutoPostBack = True, quale dovrebbe essere per gli eventi in corso, chiamare una funzione quando la condizione è soddisfatta. ASP.NET è sempre postback, è solo bisogno di gestire la condizione, altrimenti si deve gestire la validazione con JavaScript e inviare manualmente la pagina:

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

Ora mi rendo conto che l'evento SelectedIndexChanged è un evento lato server. Quindi è richiesto il postback. Probabilmente ho bisogno di JavaScript per farlo ma non so come. –

Problemi correlati