选中复选框后,单选组不会取消隐藏

Radio Group doesn't unHide when Checkbox is selected

我正在尝试取消隐藏一组单选按钮,如果它上面的复选框被选中,并在未选中复选框时隐藏它们。我有一个以前的版本,在同一个应用程序中,它工作得很好 [radio button opens checkboxes instead] 在 Working one 下。选择 MinorCheck 时,单选按钮不可见。没有错误显示,没有任何反应。为什么是这样?

我看过其他评论 Visible = "false" 如何阻止它等等。但是,很明显,开头的 visible="false" 对于我的第一个编码块来说不是问题。

我用过的一个参考:ASP.NET CheckBox does not fire CheckedChanged event when unchecking

工作一:

HTML

<td class="LeftAlign" width="24%">                 

<font class="Blackfont" size="1">
<B>                                     Union Affiliated?
</B>
</font>
<font class="WeOrangefont" size="1">
&#8226;
</font>
</td>
    <td width="10%">
       <asp:RadioButtonList ID="rblclass" runat="server" AutoPostBack="True" class="Bluefont" size="1" font-Bold="True" font-Size="8pt" >

              <asp:ListItem Value="Y">Yes</asp:ListItem>
              <asp:ListItem Value="N">No</asp:ListItem>
       </asp:RadioButtonList>
     </td>

     <td></td>  
  </tr>
</table>

VB.NET

Protected Sub rblclass_SelectedIndexChanged(sender As Object, e As EventArgs) Handles rblclass.SelectedIndexChanged
    If (rblclass.SelectedValue = "Y") Then
        Register.Focus()
        union1.Visible = True
        union2.Visible = True
        union3.Visible = True
        LocalLbl.Visible = True
        Reqimage.Visible = True
    Else
        Register.Focus()
        union1.Visible = False
        union2.Visible = False
        union3.Visible = False
        LocalLbl.Visible = False
        Reqimage.Visible = False
    End If

End Sub

编码的其他部分虽然非常相似但不起作用:

<tr>
<td class="LeftAlign" colspan="2">
    <font class="Blackfont" size="1">
               <asp:CheckBox ID="MinorCheck" runat="server" NAME="BUSINESSCLASSIFICATION" 
               class="ownerClass" value="000" checked = "false" TabIndex="32"/>

               <asp:HyperLink ID="HyperLink2" runat="server" TABSTOP = "-1" onClick="OpenWindow('Images/Supp.html', 'Min Business Concern',600, 300, 'no')" font-Underline="True" ForeColor="#666666" >Minority Business Concern</asp:HyperLink> 
   </font>
</td>

</tr>
<tr>    
  <td>
     <asp:RadioButtonList ID="RadioButtonBClass" runat="server" AutoPostBack="True"
                            class="Bluefont" size="1" font-Bold="True" font-Size="8pt" visible = "false">

      <asp:ListItem Value="Y" >African-American male</asp:ListItem>
      <asp:ListItem Value="N">African-American female</asp:ListItem>
      <asp:ListItem Value="N">Asian-Indian American male</asp:ListItem>
      <asp:ListItem Value="N">Asian-Indian American female</asp:ListItem>
      <asp:ListItem Value="N">Asian-Pacific American male</asp:ListItem>
      <asp:ListItem Value="N">Asian-Pacific American female</asp:ListItem>
      <asp:ListItem Value="N">Native American male</asp:ListItem>
      <asp:ListItem Value="N">Native American female</asp:ListItem>

  </asp:RadioButtonList>
  </td>
</tr>

VB.NET

Protected Sub MinorCheck_CheckedChanged(sender As Object, e As EventArgs) Handles MinorCheck.CheckedChanged
    If (MinorCheck.Checked = true) Then
        RadioButtonBClass.Visible = True
        NonMinorCheck.Checked = false
    Else
        RadioButtonBClass.Visible = False
    End If
End Sub

这很令人困惑,但是当您在 ASP 控件中使用 属性 Visible 时,实际上根本不会创建该对象,因此如果您尝试更改为 Visible true 则不会工作,我个人使用的是 CSS Class 的技巧,我将复制我为您的案例制作的代码:

<style>
    .CSSHiden {
        display: none;
    }
</style>

注意:我在 Checkbox Minor Check 上设置了 Autopostback=true

<asp:CheckBox ID="MinorCheck" runat="server" NAME="BUSINESSCLASSIFICATION" 
           class="ownerClass" value="000" TabIndex="32" OnCheckedChanged="MinorCheck_CheckedChanged" AutoPostBack="True"/>
<asp:HyperLink ID="HyperLink2" runat="server" TABSTOP = "-1" onClick="OpenWindow('Images/Supp.html', 'Min Business Concern',600, 300, 'no')" font-Underline="True" ForeColor="#666666" >Minority Business Concern</asp:HyperLink>

    <asp:RadioButtonList ID="RadioButtonBClass" runat="server" AutoPostBack="True" class="Bluefont" size="1" font-Bold="True" font-Size="8pt" CssClass="CSSHiden">
        <asp:ListItem Value="Y" >African-American male</asp:ListItem>
      <asp:ListItem Value="N">African-American female</asp:ListItem>
      <asp:ListItem Value="N">Asian-Indian American male</asp:ListItem>
      <asp:ListItem Value="N">Asian-Indian American female</asp:ListItem>
      <asp:ListItem Value="N">Asian-Pacific American male</asp:ListItem>
      <asp:ListItem Value="N">Asian-Pacific American female</asp:ListItem>
      <asp:ListItem Value="N">Native American male</asp:ListItem>
      <asp:ListItem Value="N">Native American female</asp:ListItem>

    </asp:RadioButtonList>

而代码我用的是c#,不过改成很简单VB.net

protected void MinorCheck_CheckedChanged(object sender, EventArgs e)
    {
        if (MinorCheck.Checked == true)
            RadioButtonBClass.CssClass = "";
        else
            RadioButtonBClass.CssClass = "CSSHiden";
    }

您的复选框缺少 AutotPostBack=True。没有它,CheckedChanged 事件将不会触发,直到其他控件执行 PostBack.