Asp.net 处理包含页面上的用户控件事件

Asp.net 处理包含页面上的用户控件事件,asp.net,user-controls,Asp.net,User Controls,我想要一个包含保存按钮的用户控件 我希望附加到save按钮的click事件由包含页面而不是用户控件处理 这可能吗 编辑更具体的 假设我有一个名为“编辑器页面”的页面和一个名为“编辑器按钮”的用户控件。 在“编辑器按钮”用户控件上,我有一个保存按钮(这是一个web控件)。我希望保存按钮的单击事件由“编辑器页面”而不是用户控件处理 之所以这样做,是因为我想指定实现常见行为的基页。我假设您拥有UserControl的代码。如果是这种情况,您可以在用户控件中定义一个保存事件,并让它公开保存按钮的单击事件

我想要一个包含保存按钮的用户控件

我希望附加到save按钮的click事件由包含页面而不是用户控件处理

这可能吗

编辑更具体的

假设我有一个名为“编辑器页面”的页面和一个名为“编辑器按钮”的用户控件。 在“编辑器按钮”用户控件上,我有一个保存按钮(这是一个web控件)。我希望保存按钮的单击事件由“编辑器页面”而不是用户控件处理


之所以这样做,是因为我想指定实现常见行为的基页。

我假设您拥有UserControl的代码。如果是这种情况,您可以在用户控件中定义一个保存事件,并让它公开保存按钮的单击事件,或者在内部设置一个事件处理程序,并在单击按钮时引发保存事件。在UserControl中可能看起来像这样:

public event EventHandler Save;

private void SaveButton_Click(object sender, EventArgs e)
{
    OnSave(e);
}

protected void OnSave(EventArgs e)
{
    // raise the Save event
    EventHandler save = Save;
    if (save != null)
    {
        save(this, e);
    }
}

这种技术通常被称为“事件冒泡”

以下是一个示例:

public partial class Test : System.Web.UI.UserControl

{

 public event EventHandler buttonClick;

 protected void Button1_Click(object sender, EventArgs e)
 {
     buttonClick(sender, e);
 }

}
然后您可以订阅活动按钮单击网页以显示不同的信息

public partial class Test: System.Web.UI.Page
 {
 protected void Page_Load(object sender, EventArgs e)
 {

 UserControlID.buttonClick+=new EventHandler(UserControlID_buttonClick);

}

protected void UserControlID_buttonClick(object sender, EventArgs e)
 {
     Response.Write("hello,I am jack.");
 }

}
UserControl1.ascx

UserControl1.ascx.cs

公共部分类UserControl1:System.Web.UI.UserControl

{

}

UserControl2.ascx

UserControl1.ascx.cs

公共部分类UserControl2:System.Web.UI.UserControl

{

}

然后将一个Asp.Net文本框(用于显示用户控件id)和以上两个用户控件添加到Aspx页面,如下所示

<title>Untitled Page</title>

}


如果单击用户控件1,文本框显示“用户控件1已单击”,或者如果单击用户控件2,文本框显示“用户控件2已单击”。

如果需要将事件传递到保留页的用户控件是多种动态呈现的用户控件之一,该怎么办
public event EventHandler UserControl2Click;



protected void Page_Load(object sender, EventArgs e)

{

} 




protected void btn2_Click(object sender, EventArgs e)

{

    UserControl2Click(sender, e);

}
<title>Untitled Page</title>
<form id="form1" runat="server">



<div>



<asp:TextBox ID="txt1" runat="server"></asp:TextBox> <br />



<UC1:UC ID="uc1" runat="server" />



<UC1:UC ID="uc2" runat="server" />



</div>



</form>
protected void Page_Load(object sender, EventArgs e)

{

    uc1.UserControl1Click += new EventHandler(uc1_UserControl1Click);

    uc2.UserControl2Click += new EventHandler(uc2_UserControl2Click);

}



protected void uc1_UserControl1Click(object sender, EventArgs e)

{

    txt1.Text = "User Control 1 Clicked";

}



protected void uc2_UserControl2Click(object sender, EventArgs e)

{

    txt1.Text = "User Control 2 Clicked";

}