我解析了Repeater Item控件的客户端ID,我想在其他命令中使用它, 我无法通过他的客户ID获得控制权?
TextBox TB = FindControl ...?
答案 0 :(得分:7)
您是否正在尝试查找位于转发器内的文本框?如果是这样,您可以使用下面的方法,根据控件的ID进行搜索 - 您可以修改它以根据控件的clientID进行检查。
public static System.Web.UI.Control FindControlIterative(System.Web.UI.Control root, string id)
{
System.Web.UI.Control ctl = root;
var ctls = new LinkedList<System.Web.UI.Control>();
while (ctl != null)
{
if (ctl.ID == id)
return ctl;
foreach (System.Web.UI.Control child in ctl.Controls)
{
if (child.ID == id)
return child;
if (child.HasControls())
ctls.AddLast(child);
}
if (ctls.First != null)
{
ctl = ctls.First.Value;
ctls.Remove(ctl);
}
else return null;
}
return null;
}
答案 1 :(得分:0)
<%= Control.ClientID %>
答案 2 :(得分:0)
您是否可以访问特定的RepeaterItem(就像在ItemDataBound事件处理程序中一样)?
如果是这样,你可以repeaterItem.FindControl("YourControlId")
来控制孩子。
答案 3 :(得分:0)
public static System.Web.UI.Control GetControlIterativeClientID(System.Web.UI.Control root, string id)
{
System.Web.UI.Control ctl = root;
var ctls = new LinkedList<System.Web.UI.Control>();
if (root != null)
{
if (ctl.ID == id)
return ctl;
foreach (System.Web.UI.Control child in ctl.Controls)
{
if (child.ID == id)
return child;
if (child.HasControls())
GetControlIterativeClientID(child, id);
}
}
return null;
}
答案 4 :(得分:0)
不是循环整个控制树中的所有控件,而是可以拆分它,然后从组中向上移动一个控件:
public Control GetControlByClientId(string clientId)
{
Queue<string> clientIds = new Queue<string>(clientId.Split(ClientIDSeparator));
Control root = this.Page;
string subControlId = null;
while (clientIds.Count > 0)
{
if (subControlId == null)
{
subControlId = clientIds.Dequeue();
}
else
{
subControlId += ClientIDSeparator + clientIds.Dequeue();
}
Control subControl = root.FindControl(subControlId);
if (subControl != null)
{
root = subControl;
subControlId = null;
}
}
if (root.ClientID == clientId)
{
return root;
}
else
{
throw new ArgumentOutOfRangeException();
}
}
注意:此函数使用ClientIDSeparator作为Control
类中定义的受保护属性,因此必须在继承Control的内容中使用此方法。
答案 5 :(得分:0)
最短的代码在这里:
private Control getControl(Control root, string pClientID)
{
if (root.ClientID == pClientID)
return root;
foreach (Control c in root.Controls)
using (Control subc= getControl(c, pClientID))
if (subc != null)
return subc;
return null;
}