【问题标题】:FindControl() method throws ArithmeticException?FindControl() 方法抛出 ArithmeticException?
【发布时间】:2008-09-17 17:24:49
【问题描述】:

我的 ASP.NET 代码中有一行 C#,如下所示:

DropDownList ddlStates = (DropDownList)fvAccountSummary.FindControl("ddlStates");

DropDownList 控件是在页面上的标记中显式声明的,而不是动态创建的。它位于 FormView 控件内。当我的代码到达这一行时,我收到一个 ArithmeticException 消息“对于 Int32,值太大或太小”。此代码以前有效,现在正在生产中。我启动了 VS2008 以对站点进行一些更改,但在我更改任何内容之前,我从页面中得到了这个异常。有人见过这个吗?

【问题讨论】:

  • 你能给我们更多的代码吗?
  • 您也可以提供堆栈跟踪吗?知道 ArithmeticException 的来源会很有用。也许FormView处于无效状态或什么?

标签: c# asp.net


【解决方案1】:

如果那是堆栈跟踪,它来自数据绑定,而不是来自您发布的行。您是否有可能拥有一些非常大的数据集?我见过一个 6000 页的 GridView 溢出 Int16,虽然看起来你实际上不太可能溢出 Int32...

例如,检查以确保您将正确的数据传递到数据源的 startpageIndex 或 pageSize。

【讨论】:

  • 查询字符串传入的字符串长度为 8 位。我应该抓住的愚蠢错误。我以前从未见过那个特定的错误。感谢您为我指明正确的方向!
【解决方案2】:

您是否 100% 确定这是引发异常的代码行?我很确定 FindControl 方法不能抛出 ArithmeticException。当然,我以前就知道我错了... :)

【讨论】:

    【解决方案3】:

    我之前在 C#/.NET 中看到过 ArithmeticException 被抛出到奇怪的地方,当时我正在使用 p/invoke 来处理与 USB 设备通信的非托管 .dll。

    崩溃是一致的,而且总是在同一个地方。当然,这个地方与崩溃完全无关(我认为这是一个基本的赋值,比如 int i = 4 或类似的傻事)

    我想告诉你一个幸福的结局,但我从未设法完全找到问题所在。我坚信原因在于非托管代码,并且它以某种方式破坏了内存,甚至可能释放了托管内存。 (删除对非托管代码的调用使问题消失)

    我要发送的信息是:您是否正在调用非托管代码?如果是这样,我的建议是您将调试技能集中在那里:)

    【讨论】:

    • 嗨,伊萨克。我没有做任何非托管代码。我还没有足够的勇气去尝试。 :)
    • 这很可能是 Mikael 的问题,感谢您的链接。 (虽然我没有办法验证,因为我说的那个代码早就被废弃了)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2015-04-02
    • 2017-06-10
    相关资源
    最近更新 更多