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

w46czmvw  于 2023-03-04  发布在  .NET
关注(0)|答案(3)|浏览(111)

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

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

有没有一种方法可以引用页面上的所有文本,或者像CSS中那样通过类名来访问它们?

eqzww0vc

eqzww0vc1#

通过获取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";
}
o8x7eapl

o8x7eapl2#

为了扩展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作为页面代码隐藏中的参数传递),也可以搜索特定的容器,如数据绑定控件:)

xpszyzbs

xpszyzbs3#

要在NWard的答案基础上进行构建,您可以使用Linq的Where:

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

相关问题