我有一个CompositeDataBoundControl并且我试图向它添加一个ItemCommand,ala是System.Web.UI.WebControls.Repeater - 所以就像一个numpty,我只是想如果我反射并添加了这样的代码,它应该工作:
private static readonly object EventItemCommand = new object();
protected override bool OnBubbleEvent(object sender, EventArgs e)
{
// throw new Exception();
bool flag = false;
if (e is RepeaterCommandEventArgs)
{
this.OnItemCommand((RepeaterCommandEventArgs)e);
flag = true;
}
return flag;
}
protected virtual void OnItemCommand(RepeaterCommandEventArgs e)
{
RepeaterCommandEventHandler handler = (RepeaterCommandEventHandler)base.Events[EventItemCommand];
if (handler != null)
{
handler(this, e);
}
}
public event RepeaterCommandEventHandler ItemCommand
{
add
{
base.Events.AddHandler(EventItemCommand, value);
}
remove
{
base.Events.RemoveHandler(EventItemCommand, value);
}
}
不幸的是,即使我有事件限制,它似乎也没有发射。我尝试沿着IPostBackEventHandler的路线走下去,但它仍然不太正确(我可以在没有args的情况下关闭一个空事件,但我看不到用RepeaterCommandEventArgs调用OnItemCommand的好方法
任何想法如何让这个工作?
过去4个小时我一直坐在办公室试图让这个工作!救命啊!
答案 0 :(得分:2)
在Repeater控件的情况下,RepeaterItem对象实际上引发了bubble事件并提供了RepeaterCommandEventArgs:
protected override bool OnBubbleEvent(object source, EventArgs e)
{
if (e is CommandEventArgs)
{
RepeaterCommandEventArgs args = new RepeaterCommandEventArgs(this, source, (CommandEventArgs) e);
base.RaiseBubbleEvent(this, args);
return true;
}
return false;
}
如果你没有在你的控件中使用RepeaterItem,你可能永远不会得到RepeaterCommandEventArgs。请尝试检查CommandEventArgs。还要确保调用控件的OnBubbleEvent方法。
答案 1 :(得分:0)
我使用自定义的“RepeaterItem”(例如RecipeItem) - 我似乎无法获取OnBubbleEvent(已经覆盖它并从RepeaterItem中窃取了东西)来触发项目。
没关系,我是个白痴。注释掉DataBind();!