Динамически создаваемый «CheckBoxList» в элементах управления заполнителями, выбрасывающий ошибку исключения нулевой ссылки во время обратной передачи страницы - PullRequest
0 голосов
/ 24 марта 2010

У меня есть веб-форма, которая будет динамически создавать количество контрольных списков, заполненных данными на основе номера строки в базе данных.Затем это добавляется к заполнителю для отображения.

есть кнопка при нажатии, которая добавит значение выбранных флажков в базу данных, но сейчас, когда кнопка нажата и после обратной передачи, на странице отобразится ошибка «System.NullReferenceException».

следующий код написан в Page_Load в (! Page.IsNotPostBack) и в цикле, который будет динамически создавать несколько контрольных списков:

                CheckBoxLis chkContent = new CheckBoxList();
                chkContent.ID = chkIDString; //chkIDString is an incremental int based on the row count 
                chkContent.RepeatDirection = RepeatDirection.Horizontal;                    
                foreach (List<t> contentList in List<t>) //data retrieved as List<t> using LINQ
                {
                    ListItem contents = new ListItem();
                    contents.Text = contentList.Title;
                    contents.Value = contentList.contentID.ToString();
                    chkContent.Items.Add(contents);
                }

                plcSchool.Controls.Add(chkContent); //plcSchool is my placeholder
                plcSchool.Controls.Add(new LiteralControl("<br>"));



protected void btnAdd_Click(object sender, EventArgs e)
{
    CheckBoxList cbl = Page.FindControl("chkContent4") as CheckBoxList;
    Response.Write(cbl.SelectedValue.ToString()); // now im just testing to get the value from one of the checkboxlist     
}

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

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

Редактировать: На самом деле это две проблемы - элементы управления отсутствуют, и их значения не будут заполняться. При перемещении создания элемента управления за пределы проверки Page.IsPostback они будут созданы, но выбранные значения не будут автоматически заполняться в конце жизненного цикла страницы.

Так что проблема в том, что ваши элементы управления отсутствуют, когда страница переходит в состояние просмотра - дешевый способ обойти это - создать динамические элементы управления в page_init.

Это страница, на которую я всегда захожу с такими вопросами: http://msdn.microsoft.com/en-us/library/ms178472.aspx

1 голос
/ 24 марта 2010

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

Это проще всего сделать, переопределив CreateChildControls(). Это создаст элементы управления в нужное время, и позже в жизненном цикле страницы их ViewState будет заполнен, и они выберут любые настройки хранится там.

В вашем случае просто переместите создание элемента управления за пределы блока !Page.IsPostback.

...