2010-04-22 3 views
0

У меня есть пользовательский элемент управления asp.net, userControl1.ascx и еще один пользовательский элемент userControl2.ascx. userControl2 находится внутри userControl1. userControl1 находится внутри элемента управления UpdatePanel. userControl2 имеет кнопку в нем, тогда я хочу, чтобы у вас была нормальная почта после нажатия. Я хочу использовать ScriptManager.RegisterPostBackControl (кнопка). У меня есть ScriptManager на главной странице. Я не знаю, как получить доступ к ScriptManager в userControl2, чтобы зарегистрировать кнопку в событии Page_Load. Итак, как я могу это сделать?ScriptManager в User Control внутри UserControl

ответ

1

Вы можете найти менеджера сценариев, используя рекурсивный метод 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; 
    } 
+0

Это сработало. Можете ли вы сказать мне, почему регулярный контроль на месте не будет работать здесь? – user204588

+0

ScriptManager не может быть прямым дочерним элементом страницы. Возможно, он находится внутри других элементов управления. Обычно это происходит при использовании мастер-страниц, поскольку главные страницы и заполнители содержимого также считаются элементами управления. – ntziolis

+1

Не лучше ли ScriptManager.GetCurrent? http://stackoverflow.com/questions/8601525/how-to-get-the-scriptmanager-placed-on-master-page-into-child-pages-code-behind –

Смежные вопросы