我的aspx页面上有几个文字控件,它们都具有相同的值。这意味着在我的代码背后,我必须写10次:
TheLiteral1.Text = "SameValue";
TheLiteral2.Text = "SameValue";
有没有办法引用页面上的所有文字,或者通过CSS中的类名来访问它们?
感谢。
答案 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);
}