В вашем пользовательском классе управления переопределите OnBubbleEvent (). Если вы вернете true, вы прекратите «пузыриться» на родительский элемент управления.
protected override bool OnBubbleEvent(object source, EventArgs args)
{
//handled
return true;
//uncomment line below to bubble up (unhandled)
//return base.OnBubbleEvent(source, args);
}
Еще одна несколько изящная вещь, о которой я подумал, обнаруженная во время работы над этим, что может быть полезно в некоторых случаях ... вы можете изменить имя команды, которое «всплывает» в иерархии управления. В вашем дочернем пользовательском элементе управления используйте OnCommand, а не Onclick.
Итак, скажем, у вас есть кнопка в вашем пользовательском элементе управления, измените код с этого:
<asp:button id="mySpecialButton"
onClick="mySpecialButton_OnClick" runat="server">
к этому:
<asp:Button id="mySpecialButton"
CommandName="mySpecialCommand"
CommandArgument="myArgument"
OnCommand="mySpecialButton_Command"
runat="server"/>
затем в коде,
protected void mySpecialButton_Command(object sender, CommandEventArgs e)
{
RaiseBubbleEvent(this, new CommandEventArgs("Handled", e));
}
Таким образом, в обработчике ItemCommand вашего родительского элемента управления вы получите новое имя команды, а не исходное имя команды из дочернего элемента управления, которое вы можете делать по своему усмотрению.