Controlポストバックの原因となったダイナミクスを取得しようとしています。すべてControlsが に動的に追加されますPanel。
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<asp:Panel runat="server" ID="panel"></asp:Panel>
</asp:Content>
私は、次の 2 つの方法でポストバックを見つける必要があることを読みました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()。