我怎样才能与父母的活动挂钩?

时间:2011-09-14 15:55:56

标签: c# asp.net

我有一个aspx文件,并在其中呈现是一个ascx控件。

aspx文件有一个按钮,单击此按钮可触发事件。

我在ascx控件中有一个按钮,我想要连接到同一个事件......但我不清楚如何做到这一点。我显然缺少一些相当基本的东西。

我以为它会是这样的:

myButton.Click += new EventHandler(btn_Click);

...

void btn_Click(object sender, EventArgs e)
{
    <some way to get ahold of the parent aspx>.btn_Click(sender, e)
}

但是,到目前为止我没有运气,这让我想知道我是不是在咆哮错误的树。

想法?

2 个答案:

答案 0 :(得分:2)

您需要在用户控件中创建一个事件处理程序,如下所示:

ASCX标记:

<asp:Button ID="UserControlButton" runat="server" OnClick="UserControlButton_Click" />

ASCX代码隐藏:

public event EventHandler ButtonClick;

protected void UserControlButton_Click(object sender, EventArgs e)
{
    if (ButtonClick != null)
        ButtonClick(sender, e);
}

在页面中:

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" />
<uc:MyUserControl ID="UserControl1" runat="server" OnButtonClick="Button1_Click" />

在页面背后的代码中:

protected void Button1_Click(object sender, EventArgs e)
{
    //if you need to differentiate one button from the other
    if (sender.Equals(Button1))
    {
        //page button logic
    }
    else
    {
        //user control button logic
    }
}

答案 1 :(得分:0)

在您的UserControl中添加:

public Action<object,EventArgs> onMyButtonClick { get; set; }

...

protected void Page_Load(object sender, EventArgs e)
{    
    btn.Click += (s,ea) => { onMyButtonClick(sender, e); };
}    

在.aspx页面中添加:

protected Action<object,EventArgs> myClickAction = (s, a) => { /* your handling code goes here */ };

...

protected void Page_Load(object sender, EventArgs e)
{    
    myUserControlName.onMyButtonClick = myClickAction;
    btn.Click += (s,ea) => { myClickAction(s,ea); };
}

这样的事情应该有效。 (注意:此代码未经过测试,可能需要调整