我想知道是否可以在转发器中找到一个控件但是通过近似。我的意思是,我有一些控件结束“.... EditMode”,我想抓住它们并修改一些属性
像这样的东西
foreach(RepeaterItem item in repeater1.Items)
{
HtmlGenericControl divEditMode = item.FindControl("....IndexOf ("EditMode")");
if(divEditMode != null)
{
divEditMode.Visible = false;
}
}
答案 0 :(得分:2)
foreach(RepeaterItem item in repeater1.Items)
{
foreach (var control in item.Controls)
{
if(control.ID.EndsWith("EditMode"))
{
control.Visible = false;
}
}
}
如果我理解你的意愿。
答案 1 :(得分:1)
实现此目的的方法是“手动”循环控件,而不是使用FindControl。您可以使用RepeaterItem的Controls集合列出所有控件并分析它们的ID。
由于控件被组织为树,因此您应该递归地检查顶层控件的Controls集合。
private IEnumerable<Control> GetEditControls(ControlCollection controls)
{
var lst = new List<Control>();
if (controls == null)
return lst;
foreach(var ctrl in controls)
{
if (ctrl.Id.EndsWith("EditMode"))
lst.Add(ctrl);
lst.AddRange(GetControls(ctrl.Controls);
}
return lst;
}
// ...
foreach(RepeaterItem item in repeater1.Items)
{
var divsEditMode = GetEditControls(item.Controls);
foreach(var divEditMode in divsEditMode)
{
divEditMode.Visible = false;
}
}