【发布时间】:2011-03-15 17:16:55
【问题描述】:
我的页面上有一些标签(例如 Label1...Label100)。
我不想遍历所有标签来检查 Text 属性是否为 = ""(或 string.Empty,等等),所以这是我的问题 - 是否可以使用 LINQ 或 Lambda 表达式来获取所有“空”标签?
【问题讨论】:
我的页面上有一些标签(例如 Label1...Label100)。
我不想遍历所有标签来检查 Text 属性是否为 = ""(或 string.Empty,等等),所以这是我的问题 - 是否可以使用 LINQ 或 Lambda 表达式来获取所有“空”标签?
【问题讨论】:
通过Controls属性可以找到所有的页面控件
Page.Controls.OfType<Label>().Where(lbl => lbl.Text == "");
请注意,这不是递归的;即,如果您有一个拥有自己的控件的PlaceHolder,则Page.Controls 不会返回这些控件。
【讨论】:
Controls 集合中找到它们。
您可以创建一个“FindAllChildren”扩展方法,从某个父控件(可能是页面)递归查找所有控件,并让它返回一个 IEnumerable
public static IEnumerable<Control> FindAllChildren(this Control control)
{
foreach(Control c in control.Controls)
{
yield return c;
foreach(control child in c.FindAllChildren()
yield return child;
}
}
var allEmptyLabels = parent.FindAllChildren().OfType<Label>()
.Where(l => l.Text == String.Empty);
【讨论】:
这是您的标签命名约定吗?
如果是这样,这种快速而肮脏的方法可以做到:
List<Label> labels = new List();
for (int i = 0; i <= 100; i++)
{
var label = (Label)Page.FindControl("Label" + i);
if (label.Text != string.Empty)
labels.Add(label);
}
// use labels collection here
没有 LINQ 或 Lambda,但它是您的另一个视角。
【讨论】: