想象一下,我有id="div1"
,id="div2"
,id="div3"
等无限的div ...
如何使用for循环将它们隐藏在代码后面?类似的东西:
for(i = 1; i <= DropDownList1.SelectedValue; i++)
{
string div = "div" + i;
div.Visible = false;
}
以上代码不起作用,只是为了让您了解我假装做的事情。
答案 0 :(得分:1)
将runat =“server”添加到div。
我用
以下方法查找我从http://blog.codinghorror.com/recursive-pagefindcontrol/
获得的控件for(i = 1; i <= DropDownList1.SelectedValue; i++)
{
var ctrl = FindControlRecursive(this.Page, string.Format("div{0}", i + 1))
if (ctrl != null)
{
ctrl .Visible = false;
}
}
查找控件的方法:
public static Control FindControlRecursive(Control root, string id)
{
if (root != null && !string.IsNullOrWhiteSpace(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;
}
答案 1 :(得分:0)
为了从代码隐藏中访问控件,它们需要是实际的服务器控件。您可以通过放置runat="server"
属性来完成此操作。
<div runat="server" id="div1"></div>
<div runat="server" id="div2"></div>
然后在代码隐藏中你可以像这样访问它们:
int x = 0;
int.TryParse(DropDownList1.SelectedValue, out x);
for (int i = 0; i < x; i++)
{
Control ctrl = Page.FindControl(string.Format("div{0}", i + 1));
if (ctrl != null)
ctrl.Visible = false;
}
显然你可以把它放在一个循环中并生成id字符串来获取所有控件。
请注意:
仅当控件直接包含在指定容器中时,此方法才会找到控件;也就是说,该方法不会在控件内的控件层次结构中进行搜索。
更多信息:here