Изменение порядка запуска событий .net Page - PullRequest
0 голосов
/ 07 мая 2009

Хорошо, это действительно раздражающая ошибка, с которой у меня были проблемы все утро!

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

Обычно, как обычно, при обратной передаче вызывается событие Page_Load, а затем вызывается метод CreateChildControls элемента управления на странице.

Странно то, что у нас есть система входа в систему (провайдер пользовательского членства) на сайте, и когда пользователь входит в систему, сначала происходит обратное, сначала метод CreateChildControls () запускает затем Page_Load, поэтому свойства элемента управления неверны (устанавливается из предыдущий постбэк)

Как события могут происходить в другом порядке? Я думал, что все события страницы происходили в одном и том же порядке, и я не вижу, как вход в систему изменит этот порядок.

ОБНОВЛЕНИЕ: Кажется, проблема в том, что я не вызываю EnsureChildControls (), но я не уверен, где он должен быть вызван? Если в элементе управления установлено несколько свойств, которые используются при настройке дочерних элементов управления, когда мне следует вызывать EnsureChildControls (), я полагаю, что не до конца понимаю, что делает EnsureChildControls ()?

Ответы [ 2 ]

4 голосов
/ 07 мая 2009

CreateChildControls вызывается всякий раз, когда они нужны странице ASP.NET. Для этого нет конкретного пункта в цикле страниц. Это может произойти в событии Init, это может произойти в событии Load. Если вы хотите убедиться, что ваши дочерние элементы управления доступны, то вызовите метод EnsureChildControls () вашего элемента управления. Вы можете сделать это в событии Init элемента управления, чтобы убедиться, что у вас есть дочерние элементы управления на протяжении всего жизненного цикла, или вы можете делать это всякий раз, когда вам нужна ссылка на один из дочерних элементов управления, например в получателе / ​​установщике свойства вашего элемента управления.

1 голос
/ 07 мая 2009

При создании свойств серверного / пользовательского элемента управления, которому требуется доступ к дочерним элементам управления, я использую следующее:

public Whatever SomeProperty
{

    get
    {
        EnsureChildControls();
        <more code here>
    }
    set
    {
        EnsureChildControls();
        <more code here>
    }
}

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

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