Пользовательский серверный элемент управления с массивом флажков в asp.net не имеет состояния main checkboxs

#asp.net #visual-studio-2010 #.net-4.0 #custom-server-controls

#asp.net #visual-studio-2010 #.net-4.0 #пользовательские серверные элементы управления

Вопрос:

Я создал серверный элемент управления, который отображает список флажков. Проблема в том, что когда я устанавливаю некоторые флажки и форму обратной передачи, все флажки снимаются. Вот мой класс управления сервером:

 public class WeekControl : WebControl
{
    public bool ShowCheckBoxs { get; set; }

    public WeekControl()
    {
        ShowCheckBoxs = true;
        Table = new Table();
        Table.ID = "table1";
        CheckBoxes = new CheckBox[7, 4];
        Table.CssClass = "weekly";
    }

    protected override void OnInit(EventArgs e)
    {
        for (int i = 0; i < 6; i  )
        {
            TableRow tr = new TableRow();
            Table.Rows.Add(tr);
            for (int j = 0; j < 4; j  )
            {
                TableCell tc = new TableCell();
                tr.Cells.Add(tc);
                if (ShowCheckBoxs)
                {
                    CheckBoxes[i, j] = new CheckBox();
                    CheckBoxes[i, j].ID = "ch"   i.ToString()   j.ToString();
                    tc.Controls.Add(CheckBoxes[i, j]);
                }
            }
        }
    }

    public CheckBox[,] CheckBoxes;
    public Table Table;
    protected override void CreateChildControls()
    {

        Controls.Add(Table);
        ChildControlsCreated = true;
        base.CreateChildControls();
    }


}
  

Есть идеи?

Ответ №1:

Возможно, CreateChildControls это происходит после шага, который десериализует viewstate. Вы пробовали перейти Controls.Add(Table) на OnInit ?

Вы можете найти статью MSDN о ASP.NET жизненный цикл страницы интересное чтение. Он упоминает CreateChildControls только в разделе комментариев.

Единственный комментарий на странице документации CreateChildControls предостерегает от переопределения метода. Если это вам поможет, угостите Роя Соливера пивом 🙂