ASP.NET -управление dropdownlist postback программно

У меня есть два выпадающих списка в моей форме-ddl1 и ddl2. Они вместе определяют видимость текстового поля-txt1. Для этого я делаю эту проверку:

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 обоих раскрывающихся списков. Как я могу или возможно достичь при условии?

2 ответов


Я не уверен, понимаю ли я вашу проблему, но вы хотите достичь обратной передачи только при соблюдении определенного условия. вы можете подключить функцию javascript как в раскрывающемся списке onChange, после="возвращение onChange, после чего();" установить autopostback элемента управления = истина;

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

проверил его и он работает...


Если 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
        }
   }