2012-06-21 41 views
1

我有以下代碼:.findControl()空指針異常和崩潰ASPX服務器

private Ext.Net.Store getStore(string name) 
{ 
    return (Ext.Net.Store)DUOSPage.FindControl(name); 
} 

getStore("store").DataSource = someList; 

我可以確認的是, 「存儲」 對象和 「someList」 是實際上出現在頁面中。在我看來,FindControl無法找到。但是,我得到一個

someList = Count = Cannot evaluate expression because a thread is stopped at a point where garbage collection is impossible, possibly because the code is optimized. 

以及本地服務器崩潰。對我來說,這意味着該元素可能在頁面中,並發現它,但它會以某種方式導致服務器畏縮和崩潰。

關於這裏有什麼問題的任何想法?爲什麼這會導致ASPX服務器崩潰?

編輯:

錯誤提示給了我這樣的:

Description: 
Stopped working 

Problem signature: 
Problem Event Name: CLR20r3 
Problem Signature 01: webdev.webserver20.exe 
Problem Signature 02: 10.0.0.0 
Problem Signature 03: 4ba204ca 
Problem Signature 04: **** 
Problem Signature 05: 1.0.0.0 
Problem Signature 06: 4fe36c1c 
Problem Signature 07: 3ce 
Problem Signature 08: c 
Problem Signature 09: System.NullReferenceException 
OS Version: 6.1.7601.2.1.0.256.4 
Locale ID: **** 
+0

服務器崩潰*非常奇怪* ...但是,如果FindControl返回'null',那麼在DUOSPage的*命名容器中目前沒有名爲'name' *的Control。 (它出於某種奇怪的原因被從控制樹中刪除*是「服務器端」控制嗎?) – 2012-06-21 18:56:42

+0

當「ASPX服務器」崩潰時,會記錄哪些消息? AppPool工人是否重新啓動?掛? (YSOD /錯誤信息屏幕不是崩潰,請記住。) – 2012-06-21 18:59:38

+0

我將錯誤輸出添加到帖子 –

回答

1

你可能會混淆兩個不同的東西。你提到你可以驗證中存在的「存儲」,我認爲這意味着你在你的HTML標記中看到它,但這並不一定意味着它可用於服務器。確保你設置了runat =「server」,以確保爲你的「store」元素生成了一個服務器端控件。

+0

它實際上標記爲「runat」,並且當我在調試中深入挖掘類本身時,它實際上存在並列出了 –

+0

在調試中挖掘了哪些類?你的意思是當你看到DUOSPage類時,你看到了Store控件? –

+0

是的,它是一個Page類型。如果你四處挖掘,你可以找到頁面上所有元素的列表。 –

0

如果您使用Ext.NET,或者即使你不是,Ext.NET包括Ext.NET 。實用程序庫(不依賴於Ext.NET)。

公用事業庫包括ControlUtils類的「的FindControl」助手一大堆工作,各地土特產Page.FindControl方法的侷限性。

ControlUtils中可能有一個選項可以避免這個問題,但我需要看到一個更完整的示例來說100%最好的解決方案/調用是什麼。類似以下內容可能會起作用。

return Ext.Net.Utilities.ControlUtils.FindControl<Store>(this, name); 

ControlUtils.FindControlByClientID(string)方法可能有幫助。

https://github.com/extnet/Ext.NET.Utilities(MIT許可)

不管怎麼說,本地ASP.NET Page.FindControl()的限制,雖然有更大的靈活性其他選項,你已經在你的頁面中可用的那些選項。

希望這會有所幫助。