我有一个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>
答案 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就会被清除。