我有一个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)
}
但是,到目前为止我没有运气,这让我想知道我是不是在咆哮错误的树。
想法?
答案 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); };
}
这样的事情应该有效。 (注意:此代码未经过测试,可能需要调整)