每当选择新的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>
testTreeView_SelectedNodeChanged
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
在选择新TreeNode
时没有刷新。
我还尝试将两个控件放在相同的UpdatePanel
中,但结果相同(事件触发但ListBox
没有更新):
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="testTreeView" EventName="SelectedNodeChanged" />
</Triggers>
<ContentTemplate>
<table style="width: 100%;">
<tr>
<td>
<asp:TreeView ID="testTreeView" runat="server" Height="304px" OnSelectedNodeChanged="testTreeView_SelectedNodeChanged" Width="257px">
<LeafNodeStyle ForeColor="Yellow" />
</asp:TreeView>
</td>
<td>
<asp:ListBox ID="ListBox1" runat="server" Height="276px" Width="305px"></asp:ListBox>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
我能做些什么来解决这个问题?
发布于 2016-09-30 01:53:56
在ListBox1.Items.Add()
之后调用ListBox1.Items.Add()
,或者在标记中使用UpdateMode="Always"
而不是"conditional"
。
https://stackoverflow.com/questions/39787854
复制