2 を含む asp.net 2.0 ページがありますUpdatePanels
。
最初のパネルにはコントロールが含まれていTreeView
ます。3 つのビュー コントロールでノードを選択すると、2 番目のパネルUpdatePanel
のみの更新がトリガーされます。これだけ正しく動作しています。
更新パネルの外側のページには 2 つのボタンがあります (前/次)。これらのボタンは、両方のパネルの更新をトリガーします。ボタンの動作は、ツリー内の隣接するノードを選択することです。これらのボタンのいずれかを初めてクリックすると、期待どおりの動作が得られ、隣接するノードが選択され、両方のパネルが更新されてこの変更が反映されます。
これらのボタンのいずれかをもう一度クリックすると、問題が発生します。ツリービューの選択されたノードは、以前に選択されたノードを覚えているようで、ボタンはこのノードで動作します。したがって、前/次のボタンの動作は、何もしないか、2 つ戻ることです。
編集- 私の問題を示すサンプルコード
マークアップ
<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;
}
ツリーのビューステートが保存されていないようですか?