Asp.net从代码隐藏中动态隐藏了div的for循环

时间:2015-02-12 12:37:18

标签: html css asp.net

想象一下,我有id="div1"id="div2"id="div3"等无限的div ... 如何使用for循环将它们隐藏在代码后面?类似的东西:

for(i = 1; i <= DropDownList1.SelectedValue; i++)
{                    
    string div = "div" + i;
    div.Visible = false;
}

以上代码不起作用,只是为了让您了解我假装做的事情。

2 个答案:

答案 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