1

我有以下代码:

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

getStore("store").DataSource = someList;

我可以验证页面中确实存在“store”对象和“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:  ****
4

3 回答 3

1

你可能会混淆两个不同的东西。您提到您可以验证页面中是否存在“商店” ,我认为这意味着您可以在 HTML 标记中看到它,但这并不一定意味着它对服务器可用。确保设置 runat="server" 以确保为“store”元素生成服务器端控件。

于 2012-06-21T18:57:42.060 回答
0

对于任何寻找解决方案的人,我在这里找到了它:

http://winmike.blogspot.com/2011/02/aspnet-findcontrol-returns-null-for.html

于 2012-06-21T20:13:01.177 回答
0

如果您正在使用 Ext.NET,或者即使您没有使用,Ext.NET 也包含 Ext.NET.Utilities 库(不依赖于 Ext.NET)。

Utilities库包含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() 是有限制的,尽管还有其他具有更大灵活性的选项,并且您的页面上已经有了这些选项。

希望这可以帮助。

于 2012-06-22T05:48:42.563 回答