2009-03-23 15 views
0

私は実際にこの動作と混同しています。誰かが私にこれを説明することはできますか?ポストバック後にオブジェクトにアクセスすることができます - ASP.NET

私は以下のクラスの構造を有する:ボタンのイベントハンドラで

public abstract BaseUserControl : System.Web.UI.UserControl 
{ 
    public List<string> listFieldMapper = new List<string>(); 
} 

    public partial class Property : BaseUserControl 
    { 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

     base.listFieldMapper.Add("test"); 
    } 
    } 

、(ポストバックの原因となる)を、私はbase.listFieldMapper

私の理解では、ポストバックの間、状態があるということでしたアクセスすることができます状態を維持できるように、ViewStateオブジェクトを使用してください。リストはどのように値を保持していますか?

base.listFieldMapperの値をOnInit(例:負荷)に設定すると、ポストバック後にnullオブジェクトが返されます。私はボタンのクリックは、ポストバックを呼び出したときと思うだろう

答えて

2

  1. サーバーが要求を処理しているときに、ユーザーコントロールのインスタンスがインスタンス化されています。
  2. サーバーは、ボタンのクリックを処理するメソッドを呼び出します。

ページが(ボタンクリックを処理していない)が要求されます。

  1. サーバーが要求を処理しているときに、ユーザーコントロールのインスタンスがインスタンス化されています。
  2. サーバーは、Loadイベントを処理するメソッドを呼び出します。
+0

OnLoadイベントは常に呼び出されます(ポストバックかどうか) – Ruslan

+0

はい、Rusianが正しいです。これを引き起こしている可能性があるかどうかは不明です。 – DotnetDude

1

ViewStateはここでは役割を果たしません。それが何かを追跡するためには、実際に何かを入れる必要があります(ほとんどのデフォルトのプロパティがそうします)。

あなたのケースでは、最初のケースでのイベントのシーケンスは、(initのリストを設定)されています

第2のケースで
Control.OnInit -> add value 
Page.OnInit -> value present 
Page.OnLoad -> value present 
Control.OnLoad -> value present 
#PostBack 
Control.OnInit -> add value 
Page.OnInit -> value present 
Page.OnLoad -> value present 
Control.OnLoad -> value present 
Button.OnClick -> value present 

(負荷にリストを設定):

Control.OnInit -> value absent 
Page.OnInit -> value absent 
Page.OnLoad -> value absent 
Control.OnLoad -> add value 
#PostBack 
Control.OnInit -> value absent 
Page.OnInit -> value absent 
Page.OnLoad -> value absent 
Control.OnLoad -> add value 
Button.OnClick -> value present 

listFieldMapper自体はクラスコンストラクタで割り当てられ、コントロールのライフサイクルのどの時点でもnullではありません。

+0

2番目のケースでは、Button.OnClickに値がありません – DotnetDude

+0

次に何かがありません。私はあなたのコードをコピーし、それは広告として動作します。あなたはどこか別のことをやっていないと確信していますか? – Ruslan

関連する問題