FindControl()方法引发ArithmeticException吗?
时间:2020-03-05 18:59:29 来源:igfitidea点击:
我的ASP.NET代码后面有一行Cin,如下所示:
DropDownList ddlStates = (DropDownList)fvAccountSummary.FindControl("ddlStates");
DropDownList控件在页面上的标记中显式声明,而不是动态创建的。它在FormView控件中。当我的代码到达这一行时,我收到一条ArithmeticException消息,提示"对于Int32,值太大或者太小。"该代码以前有效,现在已投入生产。我启动了VS2008,对该网站进行了一些更改,但是在更改任何内容之前,我从页面中获取了此异常。有人看过吗?
解决方案
回答
我们是否100%确定那是引发异常的代码行?我可以肯定,FindControl方法无法引发ArithmeticException。当然,我之前知道是错的... :)
回答
我曾经在C#/。NET中看到过ArithmeticException被抛出到奇怪的地方,那是我与p / invoke调用与USB设备通信的非托管.dll的时候。
飞机坠毁是一致的,并且总是在同一地点。当然,该位置与崩溃完全无关(我认为这是一个基本的值分配,例如int i = 4或者类似的愚蠢之举)
我想有一个圆满的结局告诉我们,但我从未设法完全找出问题所在。我坚信原因在于未托管的代码,并且它以某种方式破坏了内存,甚至释放了托管内存。 (删除对非托管代码的调用使问题消失了)
我发送的消息是:我们是否正在对非托管代码进行任何调用?如果是这样,我的建议是我们将调试技能集中在这里:)
回答
如果这是stacktrace,则它来自数据绑定,而不是来自我们发布的行。我们是否可能有一些非常大的数据集?我看过一个6000页的GridView溢出了Int16,尽管我们似乎不太可能实际上溢出了Int32 ...
检查以确保将健全的数据传递到例如数据源的startpageIndex或者pageSize中。