Каков наилучший способ обновить страницу ASPX, когда ее дочерние элементы управления ASCX должны вызвать изменение? - PullRequest
1 голос
/ 03 ноября 2008

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

Что я всегда делал, так это помещал логику в обработчик событий Pre_Render.

Поскольку это обрабатывается после обработки любых дочерних элементов управления .ascx, я могу быть уверен, что страница ASPX будет правильно отображена перед ее отображением. Я просто не думаю, что это хороший дизайн, и я всегда съеживался, когда мне приходилось это делать. Но теперь есть переполнение стека, так что я могу наконец спросить его!

Например, допустим, у меня есть элемент ascx «контроль входа» на странице. На содержащей странице отображается текстовая метка в строке заголовка для «текущего зарегистрированного пользователя».

Допустим, я нажимаю кнопку «Войти», которая запускает мою аутентификацию и регистрирует моего пользователя. Проблема в том, что текстовая метка на родительской странице уже была отображена как «Нет пользователя, вошедшего в систему». Это не хорошо!

Помещая логику в PreRender, она будет отображаться после того, как пользователь вошел в систему. Мне просто не нравится это, потому что это не то, для чего предназначен PreRender.

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

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

1 Ответ

1 голос
/ 03 ноября 2008

В вашем ascx.cs:

public delegate void NavigateEventHandler(int PID); // if you want a custom handler
public event NavigateEventHandler onNavigate;

На вашей странице.aspx.cs:

protected void Page_Init(object sender, EventArgs e) {
    eSelector1.onNavigate += new PostSelector.NavigateEventHandler(eSelector1_Navigate); }
public void eSelector1_Navigate(int PID) {
    eSelector1.PopulateComments(eSelector1.m_PID); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...