снимите флажок, если выбран один элемент списка - PullRequest
0 голосов
/ 05 мая 2011

У меня есть следующий флажок. Мне нужно снять остальные пункты списка, когда выбрано «Нет». Как я могу это сделать? Спасибо

<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

Ответы [ 2 ]

1 голос
/ 18 мая 2011
 <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;
    }

Контрольный список и флажокДругое можно добавить в панель обновления для предотвратить полную обратную передачу, что делает это немного более плавным.

1 голос
/ 05 мая 2011

Существует две возможности:

  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, чтобы определить, когда пользователь нажимает на флажок «Нет», и снимите флажки с других.

...