2012-01-26 14 views
4

私はasp.netでviewstateとカスタムコントロールに関する質問があります。asp.netのビューステートとカスタムコントロール

私はページとその上に単純な複合コントロールを持っていると言います。コンポジットコントロールでは、すべての子コントロールをPage.OnInitにロードして、ビューステートを適用してOnLoadに備えることができることを知っています。

今、ページにツリーがあり、選択したノードに基づいて、特定のカスタムコントロールをロードしたいとします。 TreeViewのselectedNodeはOnInitでは使用できませんが、OnLoad以降で使用できます。また、カスタムコントロールを追加すると、カスタムコントロールのサイクルがOnInitで開始され、OnLoadなどで開始されるページがあります。

私の質問は、カスタムコントロールのOnInitが親のOnLoadメソッドでこのコントロールをロードしていても依然として呼び出されていますが、なぜカスタムコントロールのviewstateに値が設定されないのでしょうか?

親には子のviewstateが含まれていますが、親のOnLoadから子をロードするとviewstateは利用できないのですか?

上記の状況(ツリービューを使用している)がある場合は、通常どのようにカスタムコントロールをロードするのですか?

+5

質問を段落に分割できませんか? – gdoron

+0

私にぴったりの音。ポストバックの前後でコントロールツリーが同一であることを確認しましたか? –

答えて

1

この例が示すようASP.NET が子供のためのロードビューステートが、それらはOnLoad内のページに追加している場合でも制御しない:

protected override void OnLoad(EventArgs e) 
{ 
    Literal literal = new Literal(); 
    this.placeHolder.Controls.Add(literal); 
    if (!this.IsPostBack) 
     literal.Text = "I'm still here after a postback."; 
} 

注デフォルトでは、ASP.NETがビューステートをロードすること子コントロールのインデックスに基づいて、コントロールの順序が1つのポストバックから次のポストバックまで一貫していることを確認してください。

関連する問題