0

ログイン コントロールがあり、ヘッダー コントロールに 2 つの深さでネストされています。つまり、ページ --> ヘッダー コントロール --> ログイン コントロールです。FindControl を使用してページ上のコントロールへの参照を取得できません。コントロールの可視プロパティを次のように設定できるようにしたい

  if (_loginControl != null)
            _loginControl.Visible = false;

最終的に、再帰的な FindControl メソッドを使用して、ネストされたコントロールを見つけました。

    public static 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;
    }
4

5 に答える 5

0

良い方法は、次を使用することです。

Page.FindControl() 

それが null を返す場合、コントロールはそこにありません。

于 2010-09-15T17:47:12.250 に答える
0

this.FindControl("_loginControl") または this.Page.FindControl("_loginControl") を呼び出してみてください。

メソッドの詳細については、MSDN を参照してください: http://msdn.microsoft.com/en-us/library/system.web.ui.control.findcontrol.aspx

于 2010-09-15T17:48:35.597 に答える
0

ユーザー コントロールが存在する ASP.NET ページからユーザー コントロールを無効化/非表示にする必要がありますか (または、マスター ページにユーザー コントロールが存在しますか)。同じページにある場合は、ASP.NET ページのコード ビハインドで次のようにします。

MyUserControlsID.Visible = false

MyUserControl はユーザー コントロールの ID です。ユーザー コントロールの ID を確認するには、.aspx ページのマークアップを確認すると、次のように表示されます。

<uc1:UserControlName ID="MyUserControlsID" runat="server" ... />

ハッピープログラミング!

于 2010-09-15T17:49:17.960 に答える
0

ログイン コントロールは、マークアップに登録されている場合、コード ビハインド ページのインスタンス メンバーにもなります。ID として指定したのと同じ名前を使用して、コード ビハインド クラスから通常のメンバーであるかのように参照できます (マークアップでコードをインライン化する代わりに、ほとんどのロジックでコード ビハインドを使用することをお勧めします)。

ページの FindControl() メソッドを使用することもできます。このメソッドは、特定の ID を持つコントロールのコントロール サブツリーを検索します。これには時間がかかるため、ロジック コントロールが動的に追加されていて、それが存在することを常に認識しているとは限らない場合を除き、最初のオプションをお勧めします。

于 2010-09-15T17:50:33.460 に答える
0
private List<Control> GetAllNestedUserControl(Control ph)
    {
        List<Control> Get = new List<Control>();
        foreach (var control in ph.Controls)
        {
            if (control is UserControl)
            {
                UserControl uc = control as UserControl;
                if (uc.HasControls())
                {
                   Get =  GetAllNestedUserControl(uc);

                }
            }
            else
            {
                Control c = (Control)control;
                if (!(control is LiteralControl))
                {
                     Get.Add(c);
                }
            }
        }
        return Get;
    }

親ページからこのコードを呼び出すだけで、次のコードでコントロールを取得できます

        List<Control> Get = GetAllNestedUserControl(ph);
        Label l = (Label)Get.Find(o => o.ID == "lblusername");
        l.Text = "changed from master";
于 2014-06-12T10:44:04.350 に答える