動的に作成されたラベルの .Text プロパティを参照しようとしていますが、方法が見つかりません。label1.Text を参照しようとすると、まだ作成されていないため、参照できません。
私はしようとしています:
Page.FindControl("label" & i.ToString).Text
コントロールの .ID プロパティにその方法でアクセスできますが、これも機能しません。何か案は?
Visual Studio Express 2012 For Web を使用しています。
FindControlSystem.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";
}