0

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

更新:我能够通过使用 addhandler 和 raise 事件在 aspx 页面中验证用户之前触发 button_click 事件,但问题是我没有得到任何价值。我正在考虑使用 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
4

2 回答 2

0

在按钮的单击事件中,我使用反射调用我们上面讨论的父页面方法并将文本框的值传递给该方法,然后调用该方法并将消息显示在屏幕上。

在子用户控件中:

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;
于 2014-05-27T22:52:19.590 回答
0

作为评论的答案添加。

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

OnPageLoaded 发生在初始化、加载和事件处理程序事件之后和呈现事件之前。这可能是个好地方。

页面生命周期信息的良好启动点。

于 2014-05-28T16:46:35.537 回答