我正在尝试获取Control导致回发的动态。所有Controls都被动态添加到Panel.
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<asp:Panel runat="server" ID="panel"></asp:Panel>
</asp:Content>
我已经读过以下两种方法应该找到回发Control(此时我不关心Buttons导致回发,但会)。
private Control GetPostBackControl()
{
Control toReturn = null;
string controlName = page.Request.Params.Get("__EVENTTARGET");
if (!String.IsNullOrEmpty(controlName))
{
toReturn = RecurseControls(this.Page, controlName);
}
return toReturn;
}
private Control RecurseControls(Control root, String toFind)
{
String s = root.UniqueID;
if (root.UniqueID == toFind)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = RecurseControls(c, toFind);
if (t != null)
{
return t;
}
}
return null;
}
单步执行调试器时,递归会找到面板,但其中没有子面板Controls。Controls我假设我对这些方法如何工作的理解最初是关闭的,并且在为此重新创建它们之前找不到动态添加的Post。如果是这种情况,是否有另一种方法可以找到Control触发回发的动态?如果没有,有没有办法让页面在Control's EventHandler?
请注意,我使用的是母版页。我是否使用我发布的递归方法,或者RecurseControls(this.Master, toFind);我仍然没有看到Panel'schild Controls。 GetPostBackControl()也称为内Page_Init()。