我有一个登录控件,并在标题控件中嵌套2深 即Page - >标题控制 - >登录控制。我无法使用FindControl获取对页面控件的引用。我希望能够设置控件的可见属性,如
if (_loginControl != null)
_loginControl.Visible = false;
我最终使用递归FindControl方法来查找嵌套控件。
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 :(得分:0)
一个好方法是使用:
Page.FindControl()
如果产生null,则控件不存在。
答案 1 :(得分:0)
尝试调用this.FindControl(“_ loginControl”)或this.Page.FindControl(“_ loginControl”)。
有关方法详细信息,请参阅MSDN: http://msdn.microsoft.com/en-us/library/system.web.ui.control.findcontrol.aspx
答案 2 :(得分:0)
您是否需要从其所在的ASP.NET页面中禁用/隐藏用户控件(或者,如果用户控件存在于母版页上)?如果它在同一页面中,那么在你的ASP.NET页面的代码隐藏中你会做:
MyUserControlsID.Visible = false
MyUserControl是用户控件的ID。要确定用户控件的ID,请查看.aspx页面的标记,您将看到如下内容:
<uc1:UserControlName ID="MyUserControlsID" runat="server" ... />
快乐编程!
答案 3 :(得分:0)
登录控件(如果已在标记中注册)也将是您的代码隐藏页面的实例成员;您可以从代码隐藏类中引用它,就像它是普通成员一样,使用您提供的相同名称作为ID(我建议对大多数逻辑使用代码隐藏,而不是在标记中插入代码,BTW)。
您还可以使用页面的FindControl()方法,该方法将在其控制子树中搜索具有给定ID的控件。这需要更长的时间,所以我建议使用第一个选项,除非动态添加逻辑控件,并且你并不总是知道它在那里。
答案 4 :(得分:0)
private List<Control> GetAllNestedUserControl(Control ph)
{
List<Control> Get = new List<Control>();
foreach (var control in ph.Controls)
{
if (control is UserControl)
{
UserControl uc = control as UserControl;
if (uc.HasControls())
{
Get = GetAllNestedUserControl(uc);
}
}
else
{
Control c = (Control)control;
if (!(control is LiteralControl))
{
Get.Add(c);
}
}
}
return Get;
}
只需从您的任何父页面调用此代码,然后通过以下代码获取任何控件
List<Control> Get = GetAllNestedUserControl(ph);
Label l = (Label)Get.Find(o => o.ID == "lblusername");
l.Text = "changed from master";