3

我想从用户控件调用一个方法到 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);
    }

有任何想法吗?提前致谢

4

4 回答 4

1

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

AddVisaControl av; 

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

如果您已将 UserControl 的实例添加到您的 aspx 页面,您应该有一个名称与 UserControl 实例的 ID 相同的实例:

=== 在 Page.aspx 中

<uc1:AddVisaUserControl ID="MyControl" ... />

=== 在 Page.aspx.cs 中

MyControl.UserControlButtonClicked += ...
于 2013-09-26T11:52:11.430 回答
1

你的 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" %>
<uc:AddVisaControl id="uc1" runat="server" />


 protected void Page_Load(object sender, EventArgs e)
    {
        uc1.ButtonClickEvent += new yourusercontrol.ButtonClickEventHandler(Login1_ButtonClickEvent);
    }

    void uc1_ButtonClickEvent(string data)
    {
        lbldefaultaspx.Text = data.ToString();
    }
于 2013-09-26T13:32:09.297 回答
0

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

换句话说,您AddVisaUserControl_UserControlButtonClicked的 .aspx 页面代码中需要一个方法,如下所示:

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" %>
    <uc:AddVisaControl id="AddVisaControl1" runat="server" />
    

    调用委托,如下所示:

    AddVisaControl1.UserControlButtonClicked  += new
            EventHandler(AddVisaUserControl_UserControlButtonClicked);
    
于 2013-09-26T11:50:15.303 回答
0

用户控件.ascx

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

父页面.aspx

Public Sub ClosePopUp(parameter1,parameter2)
/*Your Logic Here
End Sub
于 2015-10-20T06:53:20.630 回答