2011-05-05 3 views
0

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

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

+0

Привет, большое спасибо. У меня проблемы с переводом на vb.net. Не могли бы вы дать некоторые указания? Большое спасибо. – netNewbi3

+0

@ netNewbi3, есть онлайн-инструменты преобразования C# -> VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/ Вы можете попробовать конвертировать код в VB.NET. –

+0

Спасибо, я использую их. однако на этот раз они не работали. Благодарю. – netNewbi3

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> 

Убрана опция «None» из списка, так что мы не можем отменить «None», если пользователь решит сделать выбор языка.

/// <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, чтобы предотвратить полную обратную передачу, что делает это немного более гладкой.

Смежные вопросы