我想调用从用户控件到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);
}
有什么想法吗?提前致谢
答案 0 :(得分:1)
您似乎有一个未初始化的字段:
AddVisaControl av;
,其默认值为null,因此为NullReferenceException。
如果已将UserControl的实例添加到aspx页面,则应该有一个名称等于UserControl实例ID的实例:
Page. ===在Page.aspx 中<uc1:AddVisaUserControl ID="MyControl" ... />
Page. ===在Page.aspx.cs 中
MyControl.UserControlButtonClicked += ...
答案 1 :(得分: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();
}
答案 2 :(得分:0)
您已通过+= 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;
这不会实例化用户控件,因此您可以做两件事:
实例化用户控件,如下所示:
AddVisaControl av = new AddVisaControl();
调用委托,如下所示:
av.UserControlButtonClicked += new
EventHandler(AddVisaUserControl_UserControlButtonClicked);
将用户控件添加到页面的标记中,如下所示:
<%@ Register TagPrefix="uc" TagName="AddVisaControl"
Src="~/Controls/AddVisaUserControl.ascx" %>
<uc:AddVisaControl id="AddVisaControl1" runat="server" />
调用委托,如下所示:
AddVisaControl1.UserControlButtonClicked += new
EventHandler(AddVisaUserControl_UserControlButtonClicked);
答案 3 :(得分:0)
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