【发布时间】:2012-09-04 15:58:32
【问题描述】:
我有一个模板化控件,但在从其中触发事件时遇到问题。
我的实际控件模板比较多,稍微复杂一点,但本质就是这么简单:
<MyControl>
<SomeTemplate>
<%# Container.Blabla %>
<asp:Button runat="server" id="someButton" OnClick="ClickAction" />
</SomeTemplate>
</MyControl>
一切似乎都很好,但点击其中的按钮不会触发事件处理程序(它位于我的 page 代码隐藏中)。我在我的控制之外(或在中继器内)测试了一个按钮,效果很好。
我想这归结为所有内容的添加或数据绑定的顺序,但我看不出是什么。这是我控制的本质:
public class SomeControl : Control, INamingContainer
{
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(SomeTemplateContainer))]
public ITemplate SomeTemplate { get; set; }
public override ControlCollection Controls
{
get
{
EnsureChildControls();
return base.Controls;
}
}
protected override void CreateChildControls()
{
if (ChildControlsCreated)
return;
base.Controls.Clear();
// Creating template containers, instantiating in controls and adding controls
DataBind();
ChildControlsCreated = true;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// A bunch of stuff I know work since it operates independently of my button
}
// Some private utility methods
}
我错过了什么或做错了什么?
【问题讨论】:
-
您的控件类中是否定义了 ClickAction?此外,这可能有助于*.com/questions/1005499/…
标签: c# asp.net event-handling