【问题标题】:how to fire a click_button event from nested ascx before page_load of the aspx on postback?如何在回发aspx的page_load之前从嵌套的ascx触发click_button事件?
【发布时间】:2014-05-27 17:18:00
【问题描述】:

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

更新:我能够在 aspx 页面中使用 addhandler 和引发事件验证用户之前触发 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

【问题讨论】:

  • 有人帮忙吗?我已经搜索过,但我找不到与我想要引发事件的控件或过程位于嵌套 ascx 内的情况相同的情况。
  • 您是否考虑过将重定向逻辑移动到按钮单击事件之后,而不是先尝试单击按钮?也许是 OnLoadComplete 事件。
  • aspx 的 OnLoadComplete 事件?我还没有尝试过使用 OnLoadComplete,我会尝试并提供反馈。非常感谢。
  • 是的。它成功了。无需引发事件。非常感谢这个提示。

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


【解决方案1】:

添加为 cmets 的回答。

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

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

A good launching point for page lifecycle information.

【讨论】:

    【解决方案2】:

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

    在子用户控件中:

    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;
    

    【讨论】:

    • 我认为你误解了我想要的东西,反之亦然。 button_click 事件在 ascx2 中,我想在将用户重定向到其他页面之前手动调用此事件。重定向是在 aspx 页面中完成的,该页面恰好在 button_click 事件之前首先被处理。这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多