Когда я динамически добавляю пользовательский UserControl в Panel, пользовательский контроль теряет всю обработку событий - PullRequest
1 голос
/ 15 сентября 2011

У меня есть страница aspx, которая динамически загружает UserControl в объект Panel на основе входных данных набора переключателей. UserControl успешно добавляет и правильно отображает в Panel при обратной передаче и прекрасно вызывает событие Page_Load () в UC, но когда я взаимодействую с формой любым способом, который вызовет событие, событие не перехватывается при обратной передаче.

Я попытался добавить ассоциацию обработки событий в Page_Load (), которую, как я знаю, вызывали, а также добавить ассоциацию в тег ASP.NET без каких-либо различий в результате.

Вот как я добавляю элемент управления (имена объектов были упрощены):

private UserControl _control;

protected void RadioButtonGroup_CheckedChanged(object sender, EventArgs e)
    {
        RadioButton radioButton = (RadioButton)sender;

        if (radioButton == RadioButton1Ctl)
        {
            _control = (UserControl1)LoadControl("~/Controls/UserControl1.ascx");
            PanelCtl.Controls.Add(_control);
        }
        else if (radioButton == RadioButton2Ctl)
        {
            _control = (UserControl2)LoadControl("~/Controls/UserControl2.ascx");
            PanelCtl.Controls.Add(_control);
        }
    }

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

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 15 сентября 2011

Это происходит потому, что элементы управления добавляются динамически.Я бы предложил использовать DynamicControlsPlaceHolder вместо Panel.Он сохранит ваши элементы управления для вас, когда страница будет отправлена ​​обратно.

DynamicControlsPlaceHolder: http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

Другой альтернативой является повторное создание элементов управления при каждой обратной передаче до перезагрузки ViewState.Я бы предложил использовать OnInit.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...