我有一个带有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
答案 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 });
}
public void DisplayMessage(string textToDisplay)
{
//DOWORK
}
如果你只是需要设置一些东西,那么你可以这样做。例如您需要访问Parent
上的文本框TextBox txt= this.Parent.FindControl("txtVisitorName") as TextBox;
答案 1 :(得分:0)
作为评论的答案添加。
而不是尝试更改正常的页面生命周期,以便在页面加载之前处理按钮单击,将逻辑从页面加载移动到以后的事件,以便首先处理按钮单击。
OnPageLoaded在init,load和事件处理程序事件之后以及呈现事件之前发生。这可能是个好地方。