Как вызвать событие click_button из вложенного ascx перед page_load aspx при обратной передаче?

У меня есть aspx с usercontrol1 и внутри usercontrol1 является usercontrol2. в usercontrol2 у меня есть кнопка, что я хочу сделать, когда эта кнопка нажата, при обратной передаче я хочу сначала запустить событие button_click, прежде чем перейти к событию page_load aspx. Это возможно? мне нужно сначала запустить событие button_click, потому что при обратной передаче в событии page_load aspx я перенаправлю пользователя на другую страницу. Поэтому, прежде чем перенаправить пользователя, мне нужно получить данные, введенные пользователем в usercontrol2. Я много читал о проведении мероприятия и делегатах, но для такого новичка, как я, я не могу понять это хорошо. Пожалуйста, помогите мне, как я могу пойти по этому поводу.

ОБНОВЛЕНИЯ: я смог запустить событие button_click до проверки пользователя на странице aspx с помощью addhandler и поднять событие, но проблема в том, что я получаю НИЧЕГО значение. Я думаю об использовании postdata (так как это происходит при обратной передаче), но я не знаю, как и если это правильный путь? Пожалуйста, помогите, ниже приведены коды

В ASPX:

Public Event ShoppingCartClick As EventHandler
Private userControl As userControl2

Protected Overrides Sub OnInit(e As EventArgs)
    AddHandler ShoppingCartClick, AddressOf userControl2.btnShoppingCart_Click
    MyBase.OnInit(e)
End Sub

If IsPostBack Then
   RaiseEvent ShoppingCartClick(sender, e)
   If MyBase.CurrentWebUser.IsLoggedIn Then
      Response.Redirect("ShoppingCart.aspx")
   Else
      Response.Redirect("Login.aspx")
   End If
End If

2 ответа

Решение

Добавлено как ответ из комментариев.

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

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

Хорошая отправная точка для получения информации о жизненном цикле страницы.

В событии click для кнопки я вызываю метод Parent Page, который мы обсуждали выше, используя Reflection и передавая значение текстового поля методу, а затем метод вызывается и сообщение отображается на экране.

В дочернем пользовательском контроле:

protected void btnSend_Click(object sender, EventArgs e)
{
this.Page.GetType().InvokeMember("DisplayMessage", System.Reflection.BindingFlags.InvokeMethod,     null, this.Page, new object[] { txtMessage.Text });
}

На родительской странице у вас есть метод DisplayMessage:

public void DisplayMessage(string textToDisplay)
{
    //DOWORK
}

Если вам просто нужно что-то установить, то вы можете просто сделать это. например, вам нужно получить доступ к текстовому полю на родительском

TextBox txt= this.Parent.FindControl("txtVisitorName") as TextBox;
Другие вопросы по тегам