AJAX.NET和ListBoxes

时间:2009-02-17 20:32:06

标签: asp.net asp.net-ajax

我有一个UpdatePanel,里面有两个ListBox。我想要发生的是当页面加载第一个ListBox填充一些数据时。当用户选择和项目时,应使用相关数据填充第二个ListBox。

接下来会发生什么,第一个ListBox填充数据,用户选择一个项目并触发SelectedIndexChanged事件,但是在方法可以看到选择了哪个项目之前,选择被清除了?

<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
    <table class="listBoxTable">
        <thead>
            <tr>
                <th>
                    Please select a magazine to add articles to.</th>
            </tr>
        </thead>
        <tr>
            <td>                    
                <asp:ListBox ID="lbMagazines" runat="server" Height="300px" Width="250px" 
                    onselectedindexchanged="lbMagazines_SelectedIndexChanged" DataTextField="Title" 
                    DataValueField="Id" AutoPostBack="True">

                </asp:ListBox>
            </td>
            <td>                    
                <asp:ListBox ID="lbIssues" runat="server" Height="300px" Width="250px" 
                    Enabled="False" DataTextField="Title" DataValueField="Id">

                </asp:ListBox>
            </td>
        </tr>
    </table>
</ContentTemplate>
</asp:UpdatePanel>

3 个答案:

答案 0 :(得分:3)

如果只需要更改第二个列表框的内容,那么将第一个列表框放在UpdatePanel之外并使用triggers属性更合适:

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="lbMagazines" EventName="OnSelectedIndexChanged" />
</Triggers>

这样,当您执行AJAX回发时,只会更新第二个列表框。

答案 1 :(得分:2)

听起来你的初始列表绑定代码没有包含在Page.IsPostBack中。

If (!Page.IsPostBack)
{
    //List bind code
}

如果是这样的话,原始列表将保持重新绑定,就像你看到的一样。

答案 2 :(得分:1)

根据提供的信息,我最初的想法是你在页面加载时重新填充lbMagazines,这样当它到达事件时,selectitem / index就会被清除。