2017-01-25 4 views
0

2番目のイベントを実行するとリストが空に戻るのはなぜですか?なぜ2番目のイベントを実行するとリストが空になるのですか

List<string> ErrorList = new List<string>(); 

protected void Page_Load(object sender, EventArgs e){} 

protected void btnFirst_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 5; i++) 
     { 
      ErrorList.Add(i);  
     } 
    txtResult.Text = "Length of list: " + ErrorList.Count; 
} 

protected void btnSecond_Click(object sender, EventArgs e) 
{ 
    txtResult.Text = "Length of list: " + ErrorList.Count; 
} 

btnFirstをクリックすると:txtResult.Text = "リストの長さ:5"

btnSecondクリックすると:txtResult.Text = "リストの長さ:0"

+4

あなたが勉強して理解する必要があります[ASP.NETページ・ライフサイクル](https://msdn.microsoft.com/en-us/library/ms178472.aspx) – Steve

+3

ページ理由 - そして、すべてのそれの変数は - ですリクエストごとに新しく作成されます。上記のコメントで説明したように – stuartd

+0

の場合、新しい変数がリクエストごとに作成されます。したがって、セッションにエラーリストを格納するオプションを選択することができます。これは、ユーザセッションを通して永続化されます。 –

答えて

0

てみてくださいこのコードは、クッキーがクライアント側で有効になっている場合にのみ動作します セッションはサーバー側のコンテナです。クライアント(ブラウザ)上のクッキーには、セッションと関係を作るためのIDがあります。より多くの情報をクッキーに保存することも可能ですが、私はそれをお勧めしません。他のすべての情報は、リクエストごとに失われます。

protected void Page_Load(object sender, EventArgs e){} 

protected void btnFirst_Click(object sender, EventArgs e) 
{ 
    List<string> ErrorList = new List<string>(); 

    for (int i = 0; i < 5; i++) 
    { 
     ErrorList.Add(i);  
    } 
    Session["Errors"] = ErrorList; 
    txtResult.Text = "Length of list: " + ErrorList.Count; 
} 

protected void btnSecond_Click(object sender, EventArgs e) 
{ 
    List<string> ErrorList = (List<string>)Session["Errors"]; 
    txtResult.Text = "Length of list: " + ErrorList.Count; 
} 
+1

btnFirstの前にbtnSecondを押さないようにしてください。 – Steve

+0

ありがとう、私は試してみます。 –

+0

@Steve btnSecondは、ユーザーがbtnFirstをクリックすると表示されます。 :) –