Как вызвать событие 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;