0

我正在尝试引用动态创建的标签的 .Text 属性,但找不到方法。如果我尝试引用 label1.Text 它不会让我因为它还没有被创建。

我正在努力:

Page.FindControl("label" & i.ToString).Text

这也不起作用,尽管您可以通过这种方式访问​​控件的 .ID 属性。有任何想法吗?

我正在使用 Visual Studio Express 2012 For Web。

4

2 回答 2

2

FindControl返回一个System.Web.UI.Control没有 .Text 属性的。您需要将其转换为标签。尝试这个:

Dim label = DirectCast(Page.FindControl("label" & i.ToString()), Label)
label.Text = "foo"
于 2013-10-20T20:16:40.563 回答
0

如果一个控件嵌套在其他控件中,则需要递归查找。此外,您希望在使用 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";
}
于 2013-10-20T20:19:35.020 回答