通过类而不是ID引用asp:literal

时间:2014-02-21 08:06:20

标签: c# asp.net

我的aspx页面上有几个文字控件,它们都具有相同的值。这意味着在我的代码背后,我必须写10次:

TheLiteral1.Text = "SameValue";
TheLiteral2.Text = "SameValue";

有没有办法引用页面上的所有文字,或者通过CSS中的类名来访问它们?

感谢。

3 个答案:

答案 0 :(得分:2)

您可以通过获取Controls集合并按类型过滤它们来构建页面上的文字控件列表,如下所示:

using System.Web.UI.WebControls;

List<Literal> literals = new List<Literal>();
foreach (Literal literal in this.Controls.OfType<Literal>()) 
{
    literals.Add(literal);
}

然后,您可以遍历列表并设置它们的值。

foreach (Literal literal in literals) 
{
    literal.Text = "MyText";
}

答案 1 :(得分:1)

要扩展NWard的答案,您还可以编写一个自定义方法,该方法将在父控件中搜索指定类型的所有控件。

public static void FindControlsByTypeRecursive(Control root, Type type, ref List<Control> list)
{
    if (root.Controls.Count > 0)
    {
        foreach (Control ctrl in root.Controls)
        {
            if (ctrl.GetType() == type) //if this control is the same type as the one specified
                list.Add(ctrl); //add the control into the list
            if (ctrl.HasControls()) //if this control has any children
                FindControlsByTypeRecursive(ctrl, type, ref list); //search children
        }
    }
}

使用这种高度可重用的方法,您可以搜索整个页面(将this作为页面代码隐藏中的参数传递),或者像数据绑定控件那样传递特定容器:)

答案 2 :(得分:1)

建立在NWard的答案上,您可以使用Linq的Where:

进行过滤
foreach (var literal in Controls.OfType<Literal>().Where(x => x.CssClass=="MyCSSClass") 
{
    literals.Add(literal);
}