我想要一个包含保存按钮的用户控件。
我希望附加到保存按钮的click事件由包含页面而不是用户控件
处理这可能吗?
编辑更具体的
假设我有一个名为“Editor Page”的页面和一个名为“Editor Buttons”的用户控件。 在“编辑器按钮”用户控件上,我有一个保存按钮(这是一个Web控件)。我希望保存按钮的Click事件由“编辑器页面”而不是用户控件处理。
原因是因为我想指定实现常见行为的基页。
答案 0 :(得分:6)
这种技术通常被称为“事件冒泡”。
这是一个例子:
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.");
}
}
答案 1 :(得分:4)
我将假设您拥有UserControl的代码。如果是这种情况,您可以在用户控件中定义一个Save事件,让它公开保存按钮的Click事件either directly,或者通过内部设置事件处理程序并在按钮时引发Save事件点击。这可能在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);
}
}
答案 2 :(得分:1)
UserControl1.ascx
UserControl1.ascx.cs
public partial class UserControl1:System.Web.UI.UserControl
{
public event EventHandler UserControl1Click;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn1_Click(object sender, EventArgs e)
{
UserControl1Click(sender, e);
}
}
UserControl2.ascx
UserControl1.ascx.cs
public partial class UserControl2:System.Web.UI.UserControl
{
public event EventHandler UserControl2Click;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn2_Click(object sender, EventArgs e)
{
UserControl2Click(sender, e);
}
}
然后将一个Asp.Net文本框(显示用户控件ID)和两个用户控件添加到Aspx页面,如下所示。
<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>
现在为每个用户控件添加事件处理程序,以处理两个控件的按钮单击事件,如下所示。
public partial class _Default:System.Web.UI.Page
{
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";
}
}
如果我们点击User Control1,文本框会显示“User Control 1 Clicked”,或者如果我们点击User Control2,文本框会显示“User Control 2 Clicked”。