如何从用户控件调用方法到aspx页面?

我想调用从用户控件到aspx页面的方法

我正在尝试,但我无法在aspx页面中调用该方法

码:

AddVisaUserControl.ascx.cs

public event EventHandler UserControlButtonClicked; public void OnUserControlButtonClick() { if (UserControlButtonClicked != null) { UserControlButtonClicked(this,EventArgs.Empty); } } protected void btnRemove_Click(object sender, EventArgs e) { OnUserControlButtonClick(); } 

的.aspx

编辑

在下面的代码页面加载时我得到“空引用错误”

 AddVisaControl av; protected void Page_Load(object sender, EventArgs e) { av.UserControlButtonClicked += new EventHandler(AddVisaUserControl_UserControlButtonClicked); } private void AddVisaControl_UserControlButtonClicked(object sender, EventArgs e) { var ctrl = (AddVisaControl)LoadControl(@"AddVisaControl.ascx"); //ctrl.ID = i; this.rpt1.Controls.Remove(ctrl); } 

有任何想法吗? 提前致谢

您似乎有一个未初始化的字段:

 AddVisaControl av; 

其默认值为null,因此为NullReferenceException。

如果已将UserControl的实例添加到aspx页面,则应该有一个名称等于UserControl实例的ID的实例:

在Page.aspx中===

  

在Page.aspx.cs中===

 MyControl.UserControlButtonClicked += ... 

你的ascx控件

 public delegate void ButtonClickEventHandler(string data); public event ButtonClickEventHandler ButtonClickEvent = null; if (ButtonClickEvent != null) ButtonClickEvent("Send to aspx"); 

您的aspx页面:

 <%@ Register TagPrefix="uc" TagName="uc1" Src="~/Controls/AddVisaUserControl.ascx" %>  protected void Page_Load(object sender, EventArgs e) { uc1.ButtonClickEvent += new yourusercontrol.ButtonClickEventHandler(Login1_ButtonClickEvent); } void uc1_ButtonClickEvent(string data) { lbldefaultaspx.Text = data.ToString(); } 

您已通过+= new语法创建了委托,但是您没有在页面代码中调用的实际方法。

换句话说,您需要在.aspx页面代码中使用AddVisaUserControl_UserControlButtonClicked方法,如下所示:

 protected void AddVisaUserControl_UserControlButtonClicked(object sender, EventArgs e) { // Logic here for what the page does when the user control's remove // button is clicked } 

更新:

在OP发布更多代码后,似乎用户控件是空引用,因为这行:

 AddVisaControl av; 

这不会实例化用户控件,因此您可以执行以下两项操作:

  1. 实例化用户控件,如下所示:

     AddVisaControl av = new AddVisaControl(); 

    调用委托,如下所示:

     av.UserControlButtonClicked += new EventHandler(AddVisaUserControl_UserControlButtonClicked); 
  2. 将用户控件添加到页面的标记中,如下所示:

     <%@ Register TagPrefix="uc" TagName="AddVisaControl" Src="~/Controls/AddVisaUserControl.ascx" %>  

    调用委托,如下所示:

     AddVisaControl1.UserControlButtonClicked += new EventHandler(AddVisaUserControl_UserControlButtonClicked); 

Usercontrol.ascx

 Me.Page.GetType.InvokeMember("ClosePopUp", System.Reflection.BindingFlags.InvokeMethod, Nothing, Me.Page, New Object() {parameter1,parameter2}) 

ParentPage.aspx

 Public Sub ClosePopUp(parameter1,parameter2) /*Your Logic Here End Sub