0

動的に作成されたラベルの .Text プロパティを参照しようとしていますが、方法が見つかりません。label1.Text を参照しようとすると、まだ作成されていないため、参照できません。

私はしようとしています:

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

コントロールの .ID プロパティにその方法でアクセスできますが、これも機能しません。何か案は?

Visual Studio Express 2012 For Web を使用しています。

4

2 に答える 2

2

FindControlSystem.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 に答える