我有以下代码:
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: ****
答案 0 :(得分:1)
你可能会混淆两件不同的事情。您提到您可以验证页面中存在“store”,我认为这意味着您在HTML标记中看到它,但这并不一定意味着它可供服务器使用。确保设置runat =“server”以确保为“store”元素生成服务器端控件。
答案 1 :(得分:0)
对于任何寻找解决方案的人,我都在这里找到了:
http://winmike.blogspot.com/2011/02/aspnet-findcontrol-returns-null-for.html
答案 2 :(得分:0)
如果您正在使用Ext.NET,或者即使您不使用Ext.NET,Ext.NET也包含Ext.NET.Utilities库(不依赖于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(麻省理工学院获得许可)
无论如何,原生ASP.NET Page.FindControl()是有限制的,尽管还有其他选项具有更大的灵活性,并且您已经在页面上提供了这些选项。
希望这有帮助。