對於長期問題,提前抱歉。因爲我遇到StackOverflow異常(諷刺),我知道原因,我真的想知道我是否有我的概念,如何實現FindControl的權利。什麼是實施FindControl的正確方法
我的想法是,如果你正在實現一個自定義的子控件集合,應該可以被FindControl訪問,你必須實現FindControl並且搜索你的列表,除了調用基本方法。
所以這是現在的情況: 我寫了一個服務器控制,它有一個templateproperty(我在init上添加)。讓我們稱之爲「面板」現在(這不是默認的ASP一個)
我的結構是沿此線:
我的變化發現控件現在之前panel (1)
panel (2)
telerik:RadTabStrip
panel (3)
telerik:RadMultiPage
工作確定,不同之處在於如果radTabStrip將通過它的id尋找多頁,它將開始尋找2,因爲它不是一個直接的子頁,因此它顯然無法找到其他多頁。
我的更改是轉到NamingContainer (導致3)並循環通過子控件並在那裏執行FindControl。這最初解決了這個問題。
但是,在一個有3個孩子的結構中,期望的控件是第三種搜索方式時,會導致第一個和第二個面板之間來回跳動。所以這是一個觸發StackOverflowException的兄弟搜索,這是有道理的。
然而,顯然這對我提出了一個問題,如果我實際上並沒有在那裏做一些非常錯誤的事情。其他控件似乎沒有任何麻煩地查看NamingContainer的層次結構。
是否有一些ID名稱寄存器(例如,命名容器中的所有控件都註冊了它們所包含的ID,並且在findcontrol中,您只需要查找某個類就可以找到所需的控件,而無需通過任何定製邏輯瀏覽控件並調用FindControl)我不知道,或者類似的東西?
我真的希望你能幫助我這個。
我有一個想法如何解決我的問題這個問題,但我很想知道如何實際做到這一點應該是正確的做法。
這不會解決beeing無法在父/兄弟層次結構中找到控件的問題。通過兒童遞歸不是我遇到問題的情況 - 這將是相當容易和通用的修復。 – Dbl
你可以編寫一個像'GetParent'這樣的幫助方法,一直到最高的實例(例如Master Page),然後用上面的(是的,非常基本的和通用的)方法遍歷控件。 – Alexander
所以你說的問題是,我正在爲FindControl的其他控件的實現工作,這反過來導致無限遞歸。我敢肯定,這可以工作,但它似乎是一個可怕的很多控制遍歷,並且只能用於Controls屬性公開的控件。 FindControl通常提供搜索未由控件屬性公開的控件。 這就是爲什麼我這樣做,爲什麼它不適合我。 – Dbl