以编程方式添加列表框控件并保留Viewstate

时间:2014-06-21 11:28:19

标签: c# asp.net viewstate

我的页面有一个按钮控件。

单击该按钮时,列表框将添加到页面面板中。

问题是,在第一次点击时出现一个列表框,在第二次或更多次点击时没有任何反应,只显示第一个列表框。

我知道问题可能在于viewstate,但我不知道在哪里修复代码?

  public partial class _default : System.Web.UI.Page
    {
        List<ListBox> myList;


        protected void Page_Load(object sender, EventArgs e)
        {
            myList = new List<ListBox>();
            Button1.Click += Add_ListBox1;
        }

        public void Add_ListBox1(object sender, EventArgs e)
        {
            ListBox temp_listBox = new ListBox();
            myList.Add(temp_listBox);
            Panel1.Controls.Add(temp_listBox);
        }


    }

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要了解asp.net页面lifecyle http://msdn.microsoft.com/en-us/library/ms178472(v=vs.85).aspx。在每个按钮上单击将重新创建整个页面,因此您的面板将为空。然后处理按钮单击事件处理程序,并在面板中添加一个列表框。

此处定义了问题的可能解决方案http://www.codeproject.com/Articles/502251/How-to-create-controls-dynamically-in-ASP-NET-and

答案 1 :(得分:0)

为什么不试试这段代码 正如你所说的viewstate问题...如果它应该工作..

public partial class _default : System.Web.UI.Page
    {
 List<ListBox> myList;


    protected void Page_Load(object sender, EventArgs e)
    {
        myList = new List<ListBox>();
       Button1.Click += Add_ListBox1;
    }

    public void Add_ListBox1(object sender, EventArgs e)
    {
        int count = 1;


        if (ViewState["Clicks"] != null)
        {
            count = (int)ViewState["Clicks"] + 1;

            ListBox temp_listBox = new ListBox();
            myList.Add(temp_listBox);
            Panel1.Controls.Add(temp_listBox);

        }


        ViewState["Clicks"] = count;


    }

    protected void Button1_Click(object sender, EventArgs e)
    {

        Add_ListBox1(e,e);
    }
}