2012-05-02 8 views
6

Ich habe zwei Dropdown-Listen auf meinem Formular-ddl1 und ddl2. Sie bestimmen zusammen die Sichtbarkeit einer Textbox -txt1. Dafür habe ich tun, um diese Kontrolle:ASP.NET - Steuerelement Dropdown-Liste postback programmgesteuert

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

Wie Sie sehen können, habe ich die Seite an den Server zu stellen, nur wenn die oben condions wahr sind. Der obige Code wird beim SelectedIndexChanged-Ereignis der beiden Dropdown-Listen ausgelöst. Wie kann/kann ich eine Bedingung erfüllen?

+0

Ich verstehe nicht, was Sie tun wollen - das Formular bereits nach dem Index zurückgesendet wurde geändert wurde - was genau wollen Sie erreichen? –

+0

Ich habe AutoPostBack auf false gesetzt. Wenn ich also den Index ändere, gibt es kein Postback. –

+0

Richtig OK, Sie möchten nicht jedes Mal, wenn sich der Index ändert, Postback - nur wenn die oben genannten Bedingungen erfüllt sind? Ist das korrekt? –

Antwort

6

Ich bin nicht sicher, ob ich das Problem verstehen, aber Sie wollen Postback nur erreichen, wenn bestimmte Bedingung erfüllt ist. Sie können eine JavaScript-Funktion in beiden Dropdown-Menüs anschließen. onchange = "return onchange();" 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; 
     } 
    } 

Der Aspx-Code sollte so aussehen.

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

es getestet und es funktioniert ...

+0

Danke Kamran. Das ist gut für mich. –

1

Wenn AutoPostBack = True ist, was für Ihre Ereignisse erforderlich wäre, rufen Sie einfach eine Funktion auf, wenn Ihre Bedingung erfüllt ist. ASP.NET ist immer Entsendung zurück, man muss nur den Zustand behandeln, sonst müssen Sie die Validierung mit JavaScript verarbeiten und veröffentlichen die Seite manuell:

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

Jetzt erkenne ich, dass das SelectedIndexChanged-Ereignis ein serverseitiges Ereignis ist. Daher ist das Postback erforderlich. Ich brauche wahrscheinlich JavaScript, um das zu tun, weiß aber nicht wie. –