Asp.net UserControl中的用户控件中的ScriptManager

Asp.net UserControl中的用户控件中的ScriptManager,asp.net,updatepanel,scriptmanager,Asp.net,Updatepanel,Scriptmanager,我有一个asp.net用户控件userControl1.ascx和另一个用户控件userControl2.ascx。userControl2位于userControl1内部。userControl1位于UpdatePanel控件内。userControl2中有一个按钮,然后我想在按下时做一个正常的回发。我想使用ScriptManager.RegisterPostBackControl(按钮)。我在母版页上有一个脚本管理器。我不知道如何访问userControl2中的ScriptManager来注

我有一个asp.net用户控件userControl1.ascx和另一个用户控件userControl2.ascx。userControl2位于userControl1内部。userControl1位于UpdatePanel控件内。userControl2中有一个按钮,然后我想在按下时做一个正常的回发。我想使用ScriptManager.RegisterPostBackControl(按钮)。我在母版页上有一个脚本管理器。我不知道如何访问userControl2中的ScriptManager来注册Page_Load事件中的按钮。那么,我如何才能做到这一点呢?

您可以使用递归FindControl方法找到脚本管理器。这不是最佳实践,但它将完成工作。这并不是一个很好的方法

var scriptManager = FindControl(Page, "IdOfScriptManager"); 

public static Control FindControlRecursive(Control root, string id)
    {
        if (root.ID == id)
        {
            return root;
        }

        foreach (Control c in root.Controls)
        {
            Control t = FindControlRecursive(c, id);
            if (t != null)
            {
                return t;
            }
        }

        return null;
    }

成功了。您能告诉我为什么常规查找控件在这里不起作用吗?ScriptManager可能不是该页面的直接子级。它可能在其他控件中。使用母版页时通常会出现这种情况,因为母版页和内容占位符也被视为控件。ScriptManager.GetCurrent不是更好吗?