有时需要在用户控件中增加事件,提供调用页面使用,示例如下:
TestUserControl.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestUserControl.ascx.cs" Inherits="MyControl.UserControl.TestUserControl" %>
<asp:Label ID="TestLabel" runat="server"></asp:Label>
<asp:Button ID="SaveButton" runat="server" OnClick="SaveButton_Click" Text="UserControlButton" />
TestUserControl.ascx.cs:
首先添加委托 public delegate void SaveEventHandle(object sender, EventArgs e);
在TestUserControl类中添加事件 public event SaveEventHandle SaveClient;
protected void SaveButton_Click(object sender, EventArgs e)
{
this.OnSave(e);
}
protected void OnSave(EventArgs e)
{
if (SaveClient != null)
{
SaveClient(this, e);
}
}
使用父级页面中调用该控件:<uc1:TestUserControl ID="TestUserControl1" runat="server" OnSaveClient="Client_Save" />即可
注:注册事件必须在页面中,CS代码中会取不到
完整代码:
- namespace MyControl.UserControl
- {
- public delegate void SaveEventHandle(object sender, EventArgs e);
- public partial class TestUserControl : System.Web.UI.UserControl
- {
- public event SaveEventHandle SaveClient;
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- {
- }
- }
- protected void SaveButton_Click(object sender, EventArgs e)
- {
- this.OnSave(e);
- }
- protected void OnSave(EventArgs e)
- {
- if (SaveClient != null)
- {
- SaveClient(this, e);
- }
- }
- public string Text
- {
- get { return TestLabel.Text; }
- set { TestLabel.Text = value; }
- }
- }
- }