2011-05-05 60 views
0

我有以下checkboxlist。当选择“无”时,我需要取消选中其余列表项。我怎么做?由于取消选中checkboxlist如果选择了一个listitem

<asp:CheckBoxList ID="CheckBoxList1" RepeatDirection="Horizontal" runat="server"> 
    <asp:ListItem Value="1">French</asp:ListItem> 
    <asp:ListItem Value="2">Spanish</asp:ListItem> 
    <asp:ListItem Value="3">Italian</asp:ListItem> 
    <asp:ListItem Value="4">German</asp:ListItem> 
    <asp:ListItem Value="5">Portuguese</asp:ListItem> 
    <asp:ListItem Value="6">Chinese</asp:ListItem> 
    <asp:ListItem Value="7">Japanese</asp:ListItem> 
    <asp:ListItem Value="8">Russian</asp:ListItem> 
    <asp:ListItem Value="Other">Other</asp:ListItem> 
    <asp:ListItem Value="None">None</asp:ListItem> 
    </asp:CheckBoxList> 

UPDATE: 翻译下面的答案vb.net由达林季米特洛夫

Public Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T 
    target = value 
    Return value 
    End Function 

    Protected Sub CheckBoxList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBoxList1.SelectedIndexChanged 
    Dim listItems = CheckBoxList1.Items.Cast(Of ListItem)() 
      Dim isNoneSelected = listItems.Any(Function(x) x.Value = "None" AndAlso x.Selected = True) 
     If isNoneSelected Then 
        listItems.Where(Function(x) x.Value <> "None").ToList().ForEach(Function(x) InlineAssignHelper(x.Selected, False)) 
     End If 
    End Sub 

回答

1

有两种可能性:

  1. 服务器端:认购OnSelectedIndexChanged事件并启用AutoPostBack:

    <asp:CheckBoxList ID="CheckBoxList1" RepeatDirection="Horizontal" runat="server" AutoPostBack="true" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged"> 
        <asp:ListItem Value="1">French</asp:ListItem> 
        <asp:ListItem Value="2">Spanish</asp:ListItem> 
        <asp:ListItem Value="3">Italian</asp:ListItem> 
        <asp:ListItem Value="4">German</asp:ListItem> 
        <asp:ListItem Value="5">Portuguese</asp:ListItem> 
        <asp:ListItem Value="6">Chinese</asp:ListItem> 
        <asp:ListItem Value="7">Japanese</asp:ListItem> 
        <asp:ListItem Value="8">Russian</asp:ListItem> 
        <asp:ListItem Value="Other">Other</asp:ListItem> 
        <asp:ListItem Value="None">None</asp:ListItem> 
    </asp:CheckBoxList> 
    

    ,并在后面的代码:

    protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        var listItems = CheckBoxList1.Items.Cast<ListItem>(); 
        var isNoneSelected = listItems.Any(x => x.Value == "None" && x.Selected == true); 
        if (isNoneSelected) 
        { 
         listItems.Where(x => x.Value != "None").ToList().ForEach(x => x.Selected = false); 
        } 
    } 
    
  2. 客户端:使用JavaScript,当用户点击无复选框来检测,并取消其他人。

+0

嗨,非常感谢。我有问题翻译成vb.net。你能给一些方向吗?非常感谢。 – netNewbi3 2011-05-05 12:14:48

+0

@ netNewbi3,有在线C# - > VB.NET转换工具:http://www.developerfusion.com/tools/convert/csharp-to-vb/您可以尝试将代码隐藏转换为VB.NET。 – 2011-05-05 12:20:23

+0

谢谢,我使用这些。但是这次他们没有工作。谢谢。 – netNewbi3 2011-05-05 12:22:35

1
<asp:CheckBoxList ID="CheckBoxList1" RepeatDirection="Horizontal" runat="server" AutoPostBack="true" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged"> 
    <asp:ListItem Value="1">French</asp:ListItem> 
      <asp:ListItem Value="2">Spanish</asp:ListItem> 
      <asp:ListItem Value="3">Italian</asp:ListItem> 
      <asp:ListItem Value="4">German</asp:ListItem> 
      <asp:ListItem Value="5">Portuguese</asp:ListItem> 
      <asp:ListItem Value="6">Chinese</asp:ListItem> 
      <asp:ListItem Value="7">Japanese</asp:ListItem> 
      <asp:ListItem Value="8">Russian</asp:ListItem> 
      <asp:ListItem Value="Other">Other</asp:ListItem> 
    </asp:CheckBoxList> 
    <table> 
     <tr> 
      <td> 
       <asp:CheckBox ID="chkNone" Text="None" runat="server" AutoPostBack="True" OnCheckedChanged="chkNone_CheckedChanged" /> 
      </td> 
     </tr> 
    </table> 

从列表中删除了“无”选项 这样我们可以取消 “无”,如果用户决定 进行语言选择。

/// <summary> 
    /// clear the list 
    /// and checked "none" as SelectedIndexChanged resets it 
    /// </summary> 
    protected void chkNone_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBoxList1.ClearSelection(); 
     chkNone.Checked = true; 
    } 

    /// <summary> 
    /// If a user makes a selection clear the "none" checkbox 
    /// </summary> 
    protected void cklWatchMoveVideosIf_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     chkNone.Checked = false; 
    } 

的CheckBoxList的和checkboxOther可以添加到一个UpdatePanel到 防止完全回发,这使得这个更加顺畅。

相关问题