2012-07-02 34 views
1

我想了解一個asp.net頁面上的特定控件是否已將其「可見」屬性分配給對或錯。問題在於可見屬性會抓取父母的列表,如果其中任何一個顯示爲不可見,則查詢的控件也將顯示爲不可見。我需要知道控制本身是如何設置的。在ASP.NET中,試圖找到可能在不可見容器內的控件的已分配可見性值

我做了一些搜索,發現其提供了以下解決方案

public static bool LocalVisible(this Control control){ 
    var flags = typeof (Control) 
     .GetField("flags", BindingFlags.Instance | BindingFlags.NonPublic) 
     .GetValue(control); 

    return ! (bool) flags.GetType() 
     .GetProperty("Item", BindingFlags.Instance | BindingFlags.NonPublic) 
     .GetValue(flags, new object[] {0x10}); 
} 

How to get the set/real value of the Visible property in Asp.Net但是,當我試了一下,返回的錯誤上的getProperty的「發現不明確的匹配」。

有人可以指出我做錯了什麼,或顯示另一種獲得我想要的方式嗎?

回答

1

我有同樣的問題(兩年後)。這是我只是你指的是主題中寫的答案:

,以防有人試圖讓約恩休烏 - 羅德的代碼在VB.NET的工作,這裏是爲我工作的代碼。當我簡單地在VB中翻譯他的代碼時,我得到一個「發現不明確的匹配」異常,因爲有三種風格的「Item」屬性。

<Extension()> 
Public Function GetLocalVisible(ctl As Control) As Boolean 
    Dim flags As Object = GetType(Control).GetField("flags", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(ctl) 
    Dim infos As PropertyInfo() = flags.GetType().GetProperties(BindingFlags.Instance Or BindingFlags.NonPublic) 
    For Each info As PropertyInfo In infos 
     If info.Name = "Item" AndAlso info.PropertyType.Name = "Boolean" Then 
      Return Not CBool(info.GetValue(flags, New Object() {&H10})) 
     End If 
    Next 
    Return ctl.Visible 
End Function