2012-05-02 12 views
6

Tôi có hai danh sách thả xuống trên biểu mẫu-ddl1 và ddl2 của mình. Chúng cùng nhau xác định khả năng hiển thị của một textbox -txt1. Đối với điều đó tôi thực hiện kiểm tra này:ASP.NET - Kiểm soát danh sách thả xuống postback lập trình

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

Như bạn thấy, tôi chỉ muốn đăng trang tới máy chủ nếu các điều kiện trên là đúng. Đoạn mã trên được kích hoạt trên sự kiện SelectedIndexChanged của cả hai danh sách thả xuống. Làm thế nào tôi có thể hoặc có thể đạt được một điều kiện?

+0

Tôi không hiểu những gì bạn muốn làm - hình thức đã được đăng lại sau khi chỉ số đã được thay đổi - được chính xác những gì bạn đang cố gắng để đạt được? –

+0

Tôi đã đặt AutoPostBack thành sai. Vì vậy, khi tôi thay đổi chỉ mục, nó không postback. –

+0

Phải OK, vì vậy bạn không muốn Postback mỗi khi chỉ mục thay đổi - chỉ khi các điều kiện trên được đáp ứng? đúng không? –

Trả lời

6

Tôi không chắc liệu tôi có hiểu vấn đề của bạn nhưng bạn muốn để đạt được postback chỉ khi điều kiện nhất định được đáp ứng. bạn có thể kết nối một hàm javascript trên cả menu thả xuống onchange = "return onchange();" Đặt 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; 
     } 
    } 

Mã Aspx sẽ giống như thế này.

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

Tested nó và nó hoạt động ...

+0

Cảm ơn Kamran. Điều đó tốt cho tôi. –

1

Nếu AutoPostBack = True, nó sẽ phải được cho các sự kiện của bạn được bắn chỉ cần gọi một funciton khi điều kiện của bạn được đáp ứng. ASP.NET luôn được đăng lại, bạn chỉ cần xử lý điều kiện, nếu không bạn phải xử lý xác thực bằng JavaScript và đăng thủ công trang:

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

Bây giờ tôi nhận ra rằng sự kiện SelectedIndexChanged là một sự kiện phía máy chủ. Vì vậy, postback là bắt buộc. Tôi có thể cần JavaScript để làm điều này nhưng không biết làm thế nào. –