2011-09-29 6 views
0

J'ai 2 contrôles CheckBoxList - chk1 et chk2. J'ai besoin d'utiliser une publication asynchrone pour effacer les sélections d'une CheckBoxList si l'autre est sélectionnée. Ce qui suit ne sait pas chk1 si elle avait des sélections, et une Chk2 a été vérifié article:CheckBoxList AJAX async postback question

<asp:ScriptManager ID="sm1" runat="server" ></asp:ScriptManager> 
    <asp:UpdatePanel ID="upd" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="chk1" /> 
      <asp:AsyncPostBackTrigger ControlID="chk2" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:Label ID="result" runat="server" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

    <div style="overflow: auto; height: 150px;"> 
     <asp:CheckBoxList runat="server" ID="chk1" OnDataBound="assignClickBehaviours" AutoPostBack="true"> 
      <asp:ListItem Value="1" Text="One"></asp:ListItem> 
      <asp:ListItem Value="2" Text="Two"></asp:ListItem> 
      <asp:ListItem Value="3" Text="Three"></asp:ListItem> 
      <asp:ListItem Value="100" Text="..."></asp:ListItem> 
      <asp:ListItem Value="150" Text="One hundred and Fifty"></asp:ListItem> 
     </asp:CheckBoxList> 
    </div> 

    <div style="overflow: auto;"> 
     <asp:CheckBoxList runat="server" ID="chk2" AutoPostBack="true"> 
      <asp:ListItem Value="1" Text="One"></asp:ListItem> 
      <asp:ListItem Value="2" Text="Two"></asp:ListItem> 
      <asp:ListItem Value="3" Text="Three"></asp:ListItem> 
     </asp:CheckBoxList> 
    </div> 

code derrière:

protected void Page_Load(object sender, EventArgs e) 
    { 
     processChecks(); 
    } 

    private void processChecks() 
    { 
     if(chk2.SelectedIndex>-1) 
      chk1.ClearSelection();  
    } 

Si la chose a été mis dans le panneau de mise à jour, il travaillerait. .. mais parce qu'il peut y avoir 150 éléments dans la case à cocher, le défilement sur le débordement: auto reviendrait vers le haut si un élément en bas a été sélectionné. J'ai besoin de l'état de défilement pour rester en place (d'où le besoin de publication asynchrone). Des idées ou des alternatives?

Répondre

0

Vous pouvez essayer ce code ..

<body> 
<form id="form1" runat="server"> 

    <asp:ScriptManager ID="sm1" runat="server" ></asp:ScriptManager> 
<asp:UpdatePanel ID="upd" runat="server"> 
    <ContentTemplate> 
     <br /> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="chk1"> 
     </asp:AsyncPostBackTrigger> 
     <asp:AsyncPostBackTrigger ControlID="chk1"> 
     </asp:AsyncPostBackTrigger> 
    </Triggers> 

</asp:UpdatePanel> 

<div style="overflow: auto; height: 150px;"> 
    <asp:CheckBoxList runat="server" ID="chk1" AutoPostBack="true"> 
     <asp:ListItem Value="1" Text="One"></asp:ListItem> 
     <asp:ListItem Value="2" Text="Two"></asp:ListItem> 
     <asp:ListItem Value="3" Text="Three"></asp:ListItem> 
     <asp:ListItem Value="100" Text="..."></asp:ListItem> 
     <asp:ListItem Value="150" Text="One hundred and Fifty"></asp:ListItem> 
    </asp:CheckBoxList> 
</div> 

<div style="overflow: auto;"> 
    <asp:CheckBoxList runat="server" ID="chk2" AutoPostBack="true"> 
     <asp:ListItem Value="1" Text="One"></asp:ListItem> 
     <asp:ListItem Value="2" Text="Two"></asp:ListItem> 
     <asp:ListItem Value="3" Text="Three"></asp:ListItem> 
    </asp:CheckBoxList> 
</div> 

</form></body> 
+0

désolé ne sais pas « SelectedIndexChanged » eventName en quoi est-ce différent du code que j'ai posté qui ne fonctionne pas? – billfredtom

0

S'il vous plaît essayer avec ce code,

  1. Activer poste automatique de retour sur les listes de cases à cocher.
  2. Intégrez ensuite les deux listes de cases à cocher dans un panneau de mise à jour.
  3. Inclure le code C# dans l'événement sélectionné a changé Index de chaque cases à cocher, Dans ce cas, il est votre processChecks();

S'il vous plaît apporter les modifications suivantes, Avis

<asp:ScriptManager ID="sm1" runat="server" ></asp:ScriptManager> 
     <asp:UpdatePanel ID="upd" runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="chk1" EventName="SelectedIndexChanged"/> 
       <asp:AsyncPostBackTrigger ControlID="chk2" EventName="SelectedIndexChanged"/> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Label ID="result" runat="server" /> 
       <div style="overflow: auto; height: 150px;"> 
        <asp:CheckBoxList runat="server" ID="chk1" AutoPostBack="true"> 
        <asp:ListItem Value="1" Text="One"></asp:ListItem> 
        <asp:ListItem Value="2" Text="Two"></asp:ListItem> 
        <asp:ListItem Value="3" Text="Three"></asp:ListItem> 
        <asp:ListItem Value="100" Text="..."></asp:ListItem> 
        <asp:ListItem Value="150" Text="One hundred and Fifty"></asp:ListItem> 
        </asp:CheckBoxList> 
       </div> 
       <div style="overflow: auto;"> 
    <asp:CheckBoxList runat="server" ID="chk2" AutoPostBack="true"> 
     <asp:ListItem Value="1" Text="One"></asp:ListItem> 
     <asp:ListItem Value="2" Text="Two"></asp:ListItem> 
     <asp:ListItem Value="3" Text="Three"></asp:ListItem> 
    </asp:CheckBoxList> 
</div> 

</ContentTemplate> 
</asp:UpdatePanel>