2010-01-06 70 views
3

我有一个简单的用户控件,其中包含一些按钮,它们触发我想要使用该控件的页面处理的事件。我有我的代码设置为这样:asp.net用户控制事件传播故障

public event EventHandler Cancel; 
public event EventHandler Confirm; 
public void Confirm_Click(object sender, EventArgs e) 
{ 
    if (Confirm != null) 
     Confirm(this, e); 
} 
public void Cancel_Click(object sender, EventArgs e) 
{ 
    if (Cancel != null) 
     Cancel(this, e); 
} 

,但是当我尝试调用这些从页面正在使用该控件的页面加载事件我没有得到任何自定义事件

ASPX代码

<%@ Register TagPrefix="btg" TagName="CustomControl" Src="~/Search/CustomControl.ascx" %> 
<btg:CustomControl ID="btgControl" runat="server" ></btg:CustomControl> 

这可能是因为我在用户控件中的按钮位于更新面板中吗?

+1

需要查看页面代码。你是否正确投射控件的类型? – womp 2010-01-06 16:46:31

回答

1

你不应该看到方法。你应该看到事件。

在你父页面的加载,你需要这样做:

myUserControl.Cancel += new EventHandler(myUserControl_Cancel); 

你可以打标签,标签自动生成的方法存根。这将看起来像:

void myUserControl_Cancel(object sender, EventArgs e) {} 

然后,此代码将触发它的用户控件的方法中调用它之后。为了启动该代码,您必须将事件分配给用户控件上的按钮事件。

编辑:myUserControl是您的用户控件的ID。另外,有些人会认为事件处理程序应该在页面的init方法中。

编辑:

您的用户控件是否在页面中正确引用?即您是在web.config中注册用户控件还是在页面中使用参考指令?

此外,您是否尝试清理解决方案并重建?如果您的用户控件是动态创建/加载的,则必须将事件连接到与实例化控件相同的范围内。为了动态加载用户控件,您必须在页面中占位符并执行以下操作:

UserControl control = Page.LoadControl("~/ControlPath/ControlName.ascx"); 
((MyUserControlClass)control).Cancel += += new EventHandler(myUserControl_Cancel); // etc... 
+0

这就是我要说的,我的父母页面里没有可用的事件 – Jimmy 2010-01-06 16:59:55

+0

对不起,我从你原来的文章中假设你试图直接访问这些方法。你的意思是它只是不显示在intellisense中?我用更多的可能性更新了我的答案。是否有可能发布您的aspx代码添加控件和page_load? – 2010-01-06 17:22:10

+0

我已经重建并清理了我的解决方案几次,控件被正确调用并在页面上加载时,当我浏览它时,我确实在使用用户控件的名称而不是页面上的ID时遇到了一个错误,但是我仍然无法访问任何事件来委托他们 – Jimmy 2010-01-06 17:54:58