我正在尝试引用动态创建的标签的 .Text 属性,但找不到方法。如果我尝试引用 label1.Text 它不会让我因为它还没有被创建。
我正在努力:
Page.FindControl("label" & i.ToString).Text
这也不起作用,尽管您可以通过这种方式访问控件的 .ID 属性。有任何想法吗?
我正在使用 Visual Studio Express 2012 For Web。
FindControl返回一个System.Web.UI.Control
没有 .Text 属性的。您需要将其转换为标签。尝试这个:
Dim label = DirectCast(Page.FindControl("label" & i.ToString()), Label)
label.Text = "foo"
如果一个控件嵌套在其他控件中,则需要递归查找。此外,您希望在使用 Text 属性之前将控件强制转换为 Label 控件。
这是一个辅助方法。它递归地搜索控件。
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
return root;
return root.Controls.Cast<Control>()
.Select(c => FindControlRecursive(c, id))
.FirstOrDefault(c => c != null);
}
var myLabel = FindControlRecursive(Page, "label" + i.ToString) as Label;
if(myLabel != null)
{
myLabel.Text = "abc";
}