每当选择新的ListBox
时,我都需要将一些项目添加到TreeNode
。
我希望在没有整个页面回发的情况下发生这种情况。
为此,我有以下标记,其中ListBox
已放置在UpdatePanel
内(我认为)所需的Trigger
:
<tr>
<td>
<asp:TreeView ID="testTreeView" runat="server" Height="304px" OnSelectedNodeChanged="testTreeView_SelectedNodeChanged" Width="257px">
<LeafNodeStyle ForeColor="Yellow" />
</asp:TreeView>
</td>
<td>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="testTreeView" EventName="SelectedNodeChanged" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
protected void testTreeView_SelectedNodeChanged(object sender, EventArgs e)
{
ListBox1.Items.Clear();
var selectedNode = testTreeView.SelectedNode;
var userList = AddUsersToList(selectedNode);
foreach (var item in userList)
{
ListBox1.Items.Add(item["Title"].ToString());
}
}
当我尝试使用上面没有任何更新面板时,代码只能找到,但是当选择新的TreeNode
时整个页面会回发。
添加更新面板后,我可以看到该事件仍然会触发,但没有项目添加到ListBox1
,这让我觉得UpdatePanel
在选择新{{1}时没有刷新}}
我也尝试将两个控件放在同一个TreeNode
中,但结果相同(事件触发但UpdatePanel
未更新):
ListBox
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
在UpdatePanel2.Update()
之后致电ListBox1.Items.Add()
或在标记中使用UpdateMode="Always"
代替"conditional"
。