ViewState не пересчитывает значение при обратной передаче / На каком этапе жизненного цикла страницы следует использовать состояние просмотра

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

private int custControlCountID;

    public int CustControlCountID
    {
        get 
        {
            return (int)(ViewState["CustControlCountID"] == null? 1 : ViewState["CustControlCountID"]); 
        }
        set 
        {
            ViewState["CustControlCountID"] = value; 
        }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        for (int i = 0; i < CustControlCountID; i++)
        {
            RejRow customControl = (RejRow )LoadControl("~/RejRow .ascx");
            customControl.ID = "rejRow" + i;
            divHolder.Controls.Add(customControl);
        }
    }

    protected void btnNewRow_Click(object sender, EventArgs e)
    {
        CustControlCountID = CustControlCountID + 1;
        RejRow customControl = (RejRow)LoadControl("~/RejRow.ascx");
        customControl.ID = "rejectRow" + CustControlCountID;
        divHolder.Controls.Add(customControl);
    }

Я поделился только соответствующим кодом. При нажатии кнопки элемент управления добавляется успешно, но только один раз. Это связано с тем, что CustControlCountID всегда имеет значение 1 в Page_Init. Я узнал, что LoadViewState вызывается после Page_Init, поэтому значение, которое я устанавливаю, недоступно в Page_Init. Я также узнал, что элементы управления добавляются в Page_Init, во время которого строится иерархия элементов управления. Пожалуйста, помогите мне понять это.


person nishantv    schedule 25.02.2013    source источник
comment
Пробовали ли вы переопределить метод CreateChildControls для добавления элементов управления вместо Page_Init?   -  person Mt. Schneiders    schedule 25.02.2013


Ответы (1)


Теория предполагает, что, поскольку ViewState загружается между Page_init и Page_load, значение, которое вы получаете во время Page_init, не из загруженного состояния просмотра, и если вы установите его, оно, вероятно, будет переопределено, когда фреймворк фактически загрузит его на следующем шаге. на жизненном цикле страницы.

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

person Mt. Schneiders    schedule 25.02.2013