У меня есть страница asp.net 2.0, которая содержит 2 UpdatePanels
.
Первая панель содержит элемент управления TreeView
, когда я выбираю узел в элементе управления с тремя представлениями, он запускает обновление только второго UpdatePanel
. Это много ведет себя правильно.
На странице за пределами панели обновления (предыдущая / следующая) есть две кнопки. Эти кнопки запускают обновление обеих панелей. Поведение кнопок заключается в выборе соседнего узла в дереве. При первом нажатии на одну из этих кнопок я получаю ожидаемое поведение, и выбирается соседний узел, и обе панели обновляются, чтобы отразить это изменение.
Проблема возникает, когда я снова нажимаю любую из этих кнопок. Кажется, что выбранный узел древовидной структуры запоминает ранее выбранный узел, и кнопки воздействуют на этот узел. Таким образом, поведение предыдущих / следующих кнопок заключается в том, чтобы ничего не делать или отскочить назад на две.
Редактировать - Пример кода, демонстрирующий мою проблему
Разметка
<asp:UpdatePanel ID="myTreeViewPanel" runat="server">
<ContentTemplate>
<asp:TreeView runat="server" ID="myTreeView" OnSelectedNodeChanged="myTreeView_SelectedNodeChanged">
<SelectedNodeStyle BackColor="#FF8000" />
</asp:TreeView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="myButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:UpdatePanel ID="myLabelPanel" runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="myLabel" Text="myLabel"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="myTreeView" EventName="SelectedNodeChanged" />
<asp:AsyncPostBackTrigger ControlID="myButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button runat="server" ID="myButton" Text="myButton" OnClick="myButton_Click" />
Код позади
protected void Page_Load ( object sender, EventArgs e )
{
if ( !IsPostBack )
{
myTreeView.Nodes.Add( new TreeNode( "Test 1", "Test One" ) );
myTreeView.Nodes.Add( new TreeNode( "Test 2", "Test two" ) );
myTreeView.Nodes.Add( new TreeNode( "Test 3", "Test three" ) );
myTreeView.Nodes.Add( new TreeNode( "Test 4", "Test four" ) );
myTreeView.Nodes.Add( new TreeNode( "Test 5", "Test five" ) );
myTreeView.Nodes.Add( new TreeNode( "Test 6", "Test size" ) );
}
}
protected void myTreeView_SelectedNodeChanged ( object sender, EventArgs e )
{
UpdateLabel( );
}
protected void myButton_Click ( object sender, EventArgs e )
{
// here we just select the next node in the three
int index = myTreeView.Nodes.IndexOf( myTreeView.SelectedNode );
myTreeView.Nodes[ index + 1 ].Select( );
UpdateLabel( );
}
private void UpdateLabel ( )
{
myLabel.Text = myTreeView.SelectedNode.Value;
}
Это похоже на то, что состояние дерева не сохраняется?