繁体   English   中英

asp.net用户控件事件传播麻烦

[英]asp.net user control event propagation trouble

我有一个简单的用户控件,其中包含一些按钮,用于触发我希望由控件使用页面处理的事件。 我有我的代码设置:

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>

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

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

在父页面的加载中,您需要执行以下操作:

myUserControl.Cancel += new EventHandler(myUserControl_Cancel);

您可以点击tab,tab来自动生成方法存根。 这将是:

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...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM