2010-11-29 22 views
0

解決策を取り除き、なぜこれが機能しないのか理解できます。うまくいけば、誰かが助けることができる。 aspxページに一つだけのプレースホルダコントロールがあり動的リンクボタンがクリックされたときに変数を更新します

:背後にあるコードで

<asp:PlaceHolder ID="Placeholder1" runat="server" /> 

が、私は何か他のものに変数を変更し、テストとPage_Loadの上という変数を設定しています。どのように私は動的に追加LinkBut​​tonコントロールをクリックしたとき、来る、テスト変数は、それが国家の維持されていない:ASP.NET変数で

public string test = "Hello"; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Response.Write(test + "<br />"); //test = "Hello" 
      test = "Hello World!"; 
      Response.Write(test + "<br />"); //test = "Hello World!" 
     } 
     Placeholder1.Controls.Clear(); 
     CreateDynamicControl(); 
    } 

    private void CreateDynamicControl() 
    { 
     LinkButton lnk = new LinkButton(); 
     lnk.Click += new EventHandler(lbl_Click); 
     lnk.Text = "TEST LinkButton"; 
     Placeholder1.Controls.Add(lnk); 
    } 

    void lbl_Click(object sender, EventArgs e) 
    { 
     LinkButton lnk = sender as LinkButton; 
     Response.Write("lbl_Click: " + test + "<br />"); 
    } 

答えて

0

がポストバックの間その状態を維持していません。 SessionまたはViewStateを使用して、必要な値を保持できます。

ViewState["test"] = "Hello World!"; 
Response.Write(ViewState["test"]); 
+0

私は解決策を打ち明けてから、実際にはポストバック全体でコレクションを維持する必要があります。私はまだViewStateまたはセッションを使用する必要がありますか?どちらが良いでしょうか? – user2569353

+0

実際には、任意のシリアル化可能なオブジェクトをViewStateまたはSessionに格納できます。 ViewStateはページ上の非表示のフィールドで、クライアントに送られます。セッションはサーバー上にとどまりますが、1ページだけではありません。設定された値は、セッションの期間中存続します。大きなコレクションや機密データの場合は、サーバー(セッション)に保管しておきます。サイズが小さく、そのページでのみ使用されている場合は、ViewStateを使用します。 – Leon

関連する問題