6

我的表单-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}
   }

如您所见,只有在上述条件为真时,我才想将页面发布到服务器。上面的代码是在两个下拉列表的 SelectedIndexChanged 事件上触发的。我怎样才能或有可能在某个条件下实现?

4

2 回答 2

6

我不确定我是否理解您的问题,但只有在满足特定条件时您才想实现回发。您可以在两个下拉菜单onchange="return onchange();"上连接一个 javascript 函数 设置自动回发=真;

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

测试了它,它工作...

于 2012-05-02T13:39:44.243 回答
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
        }
   }
于 2012-05-02T13:20:25.647 回答