2012-05-02 47 views
6

我在窗體ddl1和ddl2上有兩個下拉列表。它們一起決定了文本框-txt1的可見性。對於我這樣做檢查:ASP.NET - 以編程方式控制下拉列表回發

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

正如你所看到的,我想在網頁發佈到服務器只有在上述condions是真實的。上面的代碼是在兩個下拉列表的SelectedIndexChanged事件觸發的。我怎麼能或有可能達到一個條件?

+0

我不明白你想做什麼 - 形式已經發布變更後指數回 - 究竟什麼是你想達到什麼目的? –

+0

我已將AutoPostBack設置爲false。所以當我改變索引時,它不會回發。 –

+0

正確,那麼每次索引更改時都不想回發 - 只有滿足上述條件時纔會回發。那是對的嗎? –

回答

6

我不知道如果我理解你的問題,但你要只有在滿足某些條件時才能實現回發。你可以在下拉菜單上掛上一個javascript函數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; 
     } 
    } 

Aspx代碼應該看起來像這樣。

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

測試,它的工作原理...

+0

謝謝卡姆蘭。這對我來說很好。 –

1

如果AutoPostBack = True,那麼當您的事件被觸發時,只要您的條件滿足,就可以調用一個函數。 ASP.NET總是回發,你只需要處理的條件,否則你必須處理用JavaScript驗證和手動上傳頁面:

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

現在我意識到SelectedIndexChanged事件是一個服務器端事件。所以回傳是必需的。我可能需要JavaScript來做到這一點,但不知道如何。 –

相關問題