试图弄清楚如何动态地动态更新ASP控件的属性?

时间:2010-09-02 15:21:25

标签: c# asp.net controls

在我的aspx页面中,我有许多下拉控件。

我想用“class = leftColumn”更新每个控件的属性,其中包含以下行:

propertyID.Attributes["nameOfAttribute"] = "false";

但是,我没有手动写出每个controlID并使用上面的行设置其属性,而是希望有一种方法可以通过并在每个控件ID上设置属性,如果它有class = leftcolumn。

我知道这很容易用JQuery,但是我需要用后面的代码(C#)

我被告知这是不可能的(即获取所有控件的列表,然后遍历列表并给它属性或任何其他方式。手动设置每个控件,如上例所示是唯一的方法ASP.NET。

谢谢,

2 个答案:

答案 0 :(得分:2)

使用LINQ。您可以定义一个扩展方法来提供帮助。 ControlCollection需要一些帮助。类似的东西:

foreach (DropDownList dd in this.Controls
                                .All()
                                .OfType<DropDownList>()
                                .Where(c => c.Attributes["foo"] == "bar"))
{ 
    // do something              
}

...

//define the extension method.
public static IEnumerable<Control> All(this ControlCollection controls)
{
    foreach (Control control in controls)
    {
        foreach (Control grandChild in control.Controls.All())
            yield return grandChild;

        yield return control;
    }
}

Kudos to David Findley at his ASP.NET blog

答案 1 :(得分:0)

您没有提及下拉列表是否至少包含在某个常见容器中以帮助查找它们。如果没有,并且您需要从字面上扫描整个页面以获得任何此类下拉列表,那么我建议创建一个从页面级别开始的递归方法,并枚举子项的子集和子项的控件集合等,并分析每个找到的控件。