引用动态创建的控件的Text属性

时间:2013-10-20 17:37:34

标签: asp.net vb.net webforms

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

我正在尝试:

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

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

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

2 个答案:

答案 0 :(得分:2)

FindControl返回System.Web.UI.Control,其中没有.Text属性。您需要将其强制转换为Label。试试这个:

Dim label = DirectCast(Page.FindControl("label" & i.ToString()), Label)
label.Text = "foo"

答案 1 :(得分: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";
}