2010-11-29 57 views
0

我剥离了我的解决方案,以便我可以理解为什么这不起作用。希望有人能帮忙。单击动态链接按钮时维护变量

只有一个aspx页面上的占位符控件:

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

在后面的代码,我设置了一个名为测试并在Page_Load中的变量,改变变量别的东西。为什么,当我点击动态添加LinkBut​​ton的,在测试变量没有维护它的状态:

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

在ASP.NET中的变量不保持回发之间的状态。您可以使用Session或ViewState来保存您需要的值。

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

由于我对解决方案感到厌倦,实际上我需要在回发期间维护一个Collection。我仍然应该使用ViewState甚至是Session吗?哪个更好? – user2569353 2010-11-29 18:54:12