我有我自己的Control1,它是作为子控件动态添加到Control2的,它在Control2的CreateChildControls()中实现INamingContainer。ASP.NET:如何为我自己的控件处理回发事件?
Control1本身实现IPostBackEventHandler。但RaisePostBackEvent()方法永远不会在Control1上调用,尽管我使用JavaScript调用回发方法。
是的,还有其他控件在页面上实现IPostBackEventHandler接口。
我错过了什么?
什么可能导致此问题?
UPDATE:控制1总是产生完全相同的方式和控制2
它看起来像这样在控制2分配完全相同的ID:
protected override void CreateChildControls()
{
if(!this.DesignMode)
{
Control1 c = new Control1();
c.ID = "FIXED_ID";
}
base.CreateChildControls();
}
UPDATE2: 控制1:
public class Control1: Control, IPostBackEventHandler
{
...
protected virtual void RaisePostBackEvent(string eventArgument)
{
if(!String.IsNullOrEmpty(eventArgument))
{
// Some other code
}
}
}
如果我加行
Page.RegisterRequiresRaiseEvent(c);
在Control2中的CreateChildControls()中,此方法正在调用,但始终为空eventArgument。
UPDATE3:
在JavaScript上的一些onClick事件我做到以下几点:
__doPostBack(Control1.UniqueID,'commandId=MyCommand');
其中Control1.UniqueID是当然的渲染过程中取代与真正的UNIQUEID。我查过了,这个脚本正在被调用。
@Artem,请说明您是如何注册回发脚本的?这是你的控制的一般结构。 – 2010-02-19 09:13:20
增加JavaScript的说明 – Artem 2010-02-19 19:35:00