добавление элемента управления listbox программно и сохранение Viewstate

#c# #asp.net #viewstate

#c# #asp.net #viewstate

Вопрос:

На моей странице есть элемент управления button.

При нажатии кнопки listbox добавляется на панель страницы.

Проблема в том, что при первом щелчке появляется список, при втором или более щелчках ничего не происходит, отображается только первое поле списка.

Я знаю, что проблема, вероятно, связана с состоянием просмотра, но я понятия не имею, где исправить код?

   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);
        }


    }
 

введите описание изображения здесь

Комментарии:

1. Ваш вопрос просто сбивает с толку. Именно то, что вы хотите сделать ?. «Я знаю, что проблема, вероятно, связана с состоянием просмотра, но я понятия не имею, где исправить код?» Здесь, где вы передаете переменную viewstate?. И в соответствии с вашим кодом. Вы получите только один список. Вы хотите, чтобы при каждом нажатии появлялось больше списка?

2. Да, при каждом нажатии добавляется новый LsitBox

Ответ №1:

Вам нужно понимать asp.net жизненный цикл страницы http://msdn.microsoft.com/en-us/library/ms178472 (v= против 85).aspx. При каждом нажатии кнопки вся страница будет воссоздана заново, поэтому ваша панель будет пустой. Затем обрабатывается обработчик события нажатия кнопки, и на панели добавляется только поле списка.

Возможное решение вашей проблемы определено здесь http://www.codeproject.com/Articles/502251/How-to-create-controls-dynamically-in-ASP-NET-and .

Ответ №2:

почему бы вам не попробовать этот код, поскольку вы сказали, что проблема с состоянием просмотра… если это так, это должно сработать..

 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);
    }
}