CheckBoxList AJAX асинхронная проблема обратной передачи - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть 2 элемента управления CheckBoxList - chk1 и chk2.Мне нужно использовать асинхронную обратную передачу, чтобы очистить выбор CheckBoxList, если выбран другой.Следующее не очистит chk1, если он имел выбор, и элемент chk2 был проверен:

<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 голосов
/ 17 октября 2011

Пожалуйста, попробуйте с этим кодом,

  1. Включить автоматическую публикацию обратно в обоих списках флажков.
  2. Затем вставьте оба списка флажков в панель обновления.
  3. Включите код C # в выбранном событии «Измененный индекс» для каждого флажка. В этом случае это ваши processChecks();

. Пожалуйста, внесите следующие изменения, обратите внимание на 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>
0 голосов
/ 29 сентября 2011

Вы можете попробовать этот код ..

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