我正在尝试获取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's
child Controls
。 GetPostBackControl()
也称为内Page_Init()
。