如何在回发的aspx的page_load之前从嵌套的ascx触发click_button事件?

时间:2014-05-27 17:18:00

标签: asp.net vb.net onclick ascx raiseevent

我有一个带有usercontrol1的aspx,而usercontrol1里面是usercontrol2。在usercontrol2我有一个按钮,我想要发生的是当这个按钮被点击时,在回发时我想在转到aspx的page_load事件之前首先触发button_click事件。这可能吗?我需要首先触发button_click事件,因为在aspx的page_load事件中回发时,我会将用户重定向到另一个页面。因此,在重定向用户之前,我需要获取用户在usercontrol2中输入的数据。我已经阅读了很多关于举办活动和代表的事情,但对于像我这样的新手,我无法理解。请帮我解决一下这个问题。

更新:我能够在使用addhandler和raise事件验证aspx页面中的用户之前触发button_click事件,但问题是我得到了NOTHING值。我想使用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 个答案:

答案 0 :(得分:0)

在Button的click事件中,我调用了上面使用Reflection讨论的Parent Page方法,并将文本框的值传递给方法,然后调用该方法并在屏幕上显示消息。

在子用户控件中:

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
}

如果你只是需要设置一些东西,那么你可以这样做。例如您需要访问Parent

上的文本框
TextBox txt= this.Parent.FindControl("txtVisitorName") as TextBox;

答案 1 :(得分:0)

作为评论的答案添加。

而不是尝试更改正常的页面生命周期,以便在页面加载之前处理按钮单击,将逻辑从页面加载移动到以后的事件,以便首先处理按钮单击。

OnPageLoaded在init,load和事件处理程序事件之后以及呈现事件之前发生。这可能是个好地方。

A good launching point for page lifecycle information.