2012-07-16 62 views
0

我明白,這個問題已經出現無數次,但沒有一個我能找到的帖子能夠幫助我解決這個問題。Unpredictable「找到了具有相同ID'ctl35'的多個控件」。當動態添加控件

每過一段時間,我都會在標題中收到錯誤:Multiple controls with the same ID 'ctl35' were found. FindControl requires that controls have unique IDs.這肯定不會一直髮生,而且似乎只是刷新幾次就會導致錯誤消失。

我的網頁基本上有一個UpdatePanel,其中,用戶是爲了輸入對應於訂單部分的數據。由於可以有多個部分,因此有一個按鈕可創建新的Panel,創建輸入字段並將其添加到Panel,然後將其添加到UpdatePanel。用戶可以多次單擊此按鈕以添加多個條目Panel s。爲了做到這一點,我保持List<Panel>,我添加新的Panel每次用戶想要一個新的輸入字段。當頁面收到一個回發(從添加按鈕),然後我遍歷列表並重新添加每個PanelUpdatePanel,它設法堅持現有的輸入面板。

由於這些字段是動態更新的,因此我確保將要檢索數據的字段的ID設置爲唯一且可區分的字段的ID。但是,如前所述,我偶爾會遇到有關使用ASP.NET自動生成的ID查找多個控件的問題(本例中爲ctl35)。在收到此錯誤後,查看Chrome中呈現的HTML,其中沒有任何控件將ctl35作爲其ID。此外,所呈現的HTML甚至都不包含任何ID在自動生成的「ctlXX」中結束的元素。正因爲如此,我無法理解可能出現的可能的命名衝突問題。事實上,大多數情況下都不會發生此錯誤,這也是造成混淆的主要原因。

對這個問題可能有什麼想法,或者我可能需要做什麼來解決這個問題?

回答

1

確保您將ID分配給所有動態創建的控件,而不僅僅是您需要從中獲取數據的控件。在添加的控件上使用默認ID時,我已經看到了這種情況。

+0

似乎這個問題是你說的和另一個問題的結合。事實上,將ID放在每一個控制器上都不會出現這個錯誤。然而,它的根源還有另一個問題,它以某種方式導致了這個問題很少出現的行爲。 當我們將網站離線(通過'asp_offline.htm')並重新啓用網站時,問題就會顯示出來。似乎緩存有問題,也許?我不確定,但至少可以解決問題。如果任何人都可以瞭解這一點,那將是不勝感激。 – kbhomes 2012-07-24 22:56:58

+1

如果您查看控件,分配給它的HTML標識是來自所有父控件的名稱的組合(除非您更改v4中的ClientIdMode屬性)。如果其中任何名稱發生更改,則客戶端控件無法映射回服務器端控件。這可能是您在離線/在線過程中看到的。 – 2012-07-25 02:38:40

+0

所有生成的屬於動態控件的ID都以'ctl00 $ MasterContentHolder $'爲前綴,並且這從來沒有改變過,儘管這是一個好主意。在第二次回發中發生錯誤(即添加第二個面板)似乎仍然很奇怪。哦,如果我有更多時間我可以進一步調查,但由於錯誤基本上是固定的,我將繼續前進。謝謝您的幫助! – kbhomes 2012-07-26 22:22:18

相關問題