在当前页面中找到一个控件

您好,我的问题是我似乎无法从当前页面找到控件。 我的页面类有以下代码:

我的控制有:

   Telerik:RadListBox runat="server" CssClass="RadListBox" ID="listbox_action_member" Width="125" Height="200px" Skin="Telerik" OnTransferring="ActionListBoxViewer_Transferring" OnDeleting="ActionListBoxViewer_Deleting" >         </telerik:RadListBox 

从另一个控件我需要在“action_member_dropdown”中抛出信息;

  Control control = this.Page.FindControl("ViewMeetingActions"); -> doesnt work Page page = HttpContext.Current.Handler as Page; Control ViewMeetingActions = page.FindControl("ViewMeetingActions"); -> didnt work as well Page test = this.Parent.Page; -> no succes 

如果我问页面我有多少控件说它有1个控件,我添加了5个以上。

简而言之,如何从其他控件中调用同一页面中的控件?

如果控件嵌套在其他控件中,则需要递归地找到它。

这是一个帮助方法。 它以递归方式搜索控件。

助手方法

 public static Control FindControlRecursive(Control root, string id) { if (root.ID == id) return root; return root.Controls.Cast() .Select(c => FindControlRecursive(c, id)) .FirstOrDefault(c => c != null); } 

用法

 var myControl = (MyControl)FindControlRecursive(Page, "ViewMeetingActions"); 

首先,递归循环遍历页面上的控件。 使用以下帮助程序类:

 using System.Web.UI; public class ReflectionHelper { ///  /// Check Control for match on ID and recursively check all Children for match on ID. ///  ///  ///  /// Control if found, null if not found /// /// Jason Williams | 9/7/2014 | webprogrammerguy.com public static Control FindControlRecursive(Control ParentControl, string ControlId) { if (ParentControl.ID == ControlId) { return ParentControl; } foreach (Control Ctl in ParentControl.Controls) { Control FoundCtl = FindControlRecursive(Ctl, ControlId); if ((FoundCtl != null)) { return FoundCtl; } } return null; } ///  /// Check Control for match on ID and recursively check all Children for match on ID. Attempt to Invoke() Control method. ///  ///  ///  ///  ///  /// bool true if executed, bool false if error or not executed /// /// Jason Williams | 9/7/2014 | webprogrammerguy.com public static bool FindControlRecursiveAndInvokeMethod(Control ParentControl, string ControlId, string MethodName, object[] parameters) { var ctrl = FindControlRecursive(ParentControl, ControlId); if (ctrl != null) { try { MethodInfo[] ctrlMethods = ctrl.GetType().GetMethods(); foreach (MethodInfo method in ctrlMethods) { if (method.Name == MethodName) { method.Invoke(ctrl, parameters); return true; } } //return false; } catch (System.Exception) { //return false; } } else { //return false; } return false; } ///  /// Check Control for match on ID and recursively check all Children for match on ID. Attempt to set SetValue() on Control property. ///  ///  ///  ///  ///  /// bool true if executed, bool false if error or not executed /// /// Jason Williams | 9/7/2014 | webprogrammerguy.com public static bool FindControlRecursiveAndSetPropertyValue(Control ParentControl, string ControlId, string PropertyName, string value) { var ctrl = FindControlRecursive(ParentControl, ControlId); if (ctrl != null) { try { PropertyInfo[] ctrlProperties = ctrl.GetType().GetProperties(); foreach (PropertyInfo property in ctrlProperties) { if (property.Name == PropertyName) { property.SetValue(ctrl, value, new object[0]); return true; } } //return false; } catch (System.Exception) { //return false; } } else { //return false; } return false; } ///  /// Check Control for match on ID and recursively check all Children for match on ID. Attempt to set SetValue() on Control property. ///  ///  ///  ///  ///  /// bool true if executed, bool false if error or not executed /// Jason Williams | 9/7/2014 | webprogrammerguy.com public static bool FindControlRecursiveAndSetPropertyValue(Control ParentControl, string ControlId, string PropertyName, int value) { var ctrl = FindControlRecursive(ParentControl, ControlId); if (ctrl != null) { try { PropertyInfo[] ctrlProperties = ctrl.GetType().GetProperties(); foreach (PropertyInfo property in ctrlProperties) { if (property.Name == PropertyName) { property.SetValue(ctrl, value, new object[0]); return true; } } //return false; } catch (System.Exception) { //return false; } } else { //return false; } return false; } } 

其次,使用该类获取Control Ref:

 Control ctrlActionMemberDropdown = ReflectionHelper.FindControlRecursive(this.Page, "action_member_dropdown"); 

第三,将行插入DropDownList控件:

 ctrlActionMemberDropdown.Items.Insert(0, "<-- Select -->"); 

谢谢,

Page.Controls为您提供控件层次结构中最顶层控件的集合。 WebForm本身就是一个控件,并包含许多其他控件。 您将需要遍历此层次结构以查看整个控件集合。

FindControl方法应该找到您要查找的控件。 您可以与我们分享更多代码来certificate问题吗?