2012-04-15 42 views
5

Trong jQuery có một hàm được gọi là .parents ('xx') cho phép tôi bắt đầu với một đối tượng ở đâu đó trong cây DOM và tìm kiếm trong DOM để tìm đối tượng mẹ của một loại cụ thể.C# tương đương với jQuery.parents (Type)

Bây giờ tôi đang tìm điều tương tự trong mã C#. Tôi có một số asp.net panel mà đôi khi nằm trong một bảng cha khác, hoặc đôi khi thậm chí là 2 hoặc 3 bảng cha và tôi cần phải di chuyển lên trên thông qua các bậc cha mẹ này để tìm được số UserControl mà tôi đang tìm kiếm.

Có cách nào dễ dàng để thực hiện việc này trong C#/asp.net không?

Trả lời

2

Chỉnh sửa: sau khi đọc lại câu hỏi của bạn, tôi đã có một đâm vào nó dựa trên các liên kết thứ hai trong bài viết của tôi:

public static T FindControl<T>(System.Web.UI.Control Control) where T : class 
{ 
    T found = default(T); 

    if (Control != null && Control.Parent != null) 
    { 
     if(Control.Parent is T) 
      found = Control.Parent; 
     else 
      found = FindControl<T>(Control.Parent); 
    } 

    return found; 
} 

Xin lưu ý, chưa được kiểm tra, chỉ cần thực hiện lập ngay bây giờ.

Dưới đây để tham khảo.

Có một chức năng phổ biến được gọi là FindControlRecursive, nơi bạn có thể đi bộ cây điều khiển từ trang xuống để tìm điều khiển với một ID cụ thể.

Dưới đây là một thực hiện từ http://dotnetslackers.com/Community/forums/find-control-recursive/p/2708/29464.aspx

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; 
} 

Bạn có thể sử dụng điều này như:

var control = FindControlRecursive(MyPanel.Page,"controlId"); 

Bạn cũng có thể kết hợp nó với điều này: http://weblogs.asp.net/eporter/archive/2007/02/24/asp-net-findcontrol-recursive-with-generics.aspx để tạo ra một phiên bản đẹp hơn.

+0

không Đây có phải là một cách sai lầm xung quanh? OP yêu cầu tìm kiếm ở trên nhưng điều này là tìm kiếm nếu tôi không nhầm. – ChrisWue

+0

Vâng, bạn nói đúng, nhưng điều này nên đặt anh ta/cô ấy trên các dòng bên phải .. –

+0

được cập nhật với triển khai thử nghiệm. –

2

Bạn sẽ có thể sử dụng Parent tài sản của Control:

private Control FindParent(Control child, string id) 
{ 
    if (child.ID == id) 
     return child; 
    if (child.Parent != null) 
     return FindParent(child.Parent, id); 
    return null; 
} 
Các vấn đề liên quan