CheckBoxList AJAX异步回发问题

时间:2011-09-29 13:18:46

标签: c# asp.net asp.net-ajax asp.net-3.5

我有2个CheckBoxList控件 - chk1和chk2。如果选择了另一个,我需要使用异步回发来清除CheckBoxList的选择。如果选择了chk1,则以下将不会清除chk1:

<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>
代码背后的代码:

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

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

如果整个事情都放在更新面板中,它会起作用......但是因为复选框中可以有150个项目,所以如果底部有一个项目,则溢出上的滚动:auto会弹回到顶部被选中了。我需要保持滚动状态(因此需要异步回发)。有什么想法或替代方案吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试此代码..

<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>

答案 1 :(得分:0)

请尝试使用此代码,

  1. 在两个复选框列表上启用自动回发。
  2. 然后将复选框列表嵌入更新面板中。
  3. 在每个复选框的所选索引更改事件中包含C#代码,在这种情况下,它是您的processChecks();
  4. 请进行以下更改,请注意EventName'SelectedIndexChanged'

    <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>