1

マスターページで、次のようにマスターページのコードビハインドからコントロールを追加したいパネルを取得しました:

var cphRegionName = this.Page.FindControl("pnlLeft") as Panel;
cphRegionName.Controls.Add(uc);

しかし、私はこのエラーが発生します:

cphRegionName.Controls.Add(uc) でオブジェクト参照がオブジェクトのインスタンスに設定されていません。

考えられる他のすべての方法を試しましたが、同じエラーが発生します。

FindControl を使用して PANEL にアクセスする理由は、パネルの名前が動的 ("pnlLeft") であり、データベースから読み取るためです。

4

2 に答える 2

3

メソッドはFindControl再帰的に機能しません。これは、コントロールがページに直接追加されない限り、コントロールが見つからないことを意味します。

コンテナー コントロールがわかっている場合は、ページではなくそのコンテナー コントロールで FindControl を使用します。

そうでない場合は、このような関数を使用して問題を解決できます

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 
于 2013-03-30T06:22:05.933 に答える
0

FindControl は再帰的ではないため、正しいコンテナーで呼び出していることを確認する必要があります。パネルが null 参照に基づいてルートで定義されているようには見えません。パネルの親で FindControl を呼び出してみてください

于 2013-03-30T06:19:34.547 に答える