У меня есть строка C# в моем коде ASP.NET, которая выглядит так:
DropDownList ddlStates = (DropDownList)fvAccountSummary.FindControl("ddlStates");
Элемент управления DropDownList явно объявлен в разметке на странице, а не создается динамически. Он находится внутри элемента управления FormView. Когда мой код попадает в эту строку, я получаю ArithmeticException с сообщением «Значение было слишком большим или слишком маленьким для Int32». Этот код работал раньше и сейчас находится в разработке. Я запустил VS2008, чтобы внести некоторые изменения в сайт, но, прежде чем что-либо изменить, я получил это исключение со страницы. Кто-нибудь видел это раньше?
Можете ли вы также предоставить трассировку стека? Было бы полезно знать, откуда взялось исключение ArithmeticException. Возможно, FormView находится в недопустимом состоянии или что-то в этом роде?





Вы на 100% уверены, что именно эта строка кода вызывает исключение? Я почти уверен, что метод FindControl не может генерировать исключение ArithmeticException. Конечно, я и раньше ошибался ... :)
Раньше я видел, как ArithmeticException выбрасывалось в странных местах в C# /. NET, и это было, когда я работал с p / invoke для неуправляемой .dll, разговаривающей с USB-устройством.
Крушение было постоянным и всегда происходило в одном и том же месте. Конечно, это место не имело никакого отношения к аварии (я думаю, что это было базовое присвоение значений, например int i = 4 или что-то подобное глупое)
Я хотел бы сказать вам счастливый конец, но мне так и не удалось полностью отследить проблему. Я твердо убежден, что причина была в неуправляемом коде и что он каким-то образом повредил память или, возможно, даже освободил управляемую память. (Удаление вызовов неуправляемого кода решило проблему)
Я отправляю следующее сообщение: выполняете ли вы какие-либо вызовы неуправляемого кода? Если это так, я предлагаю вам сосредоточить свои навыки отладки на этом :)
Привет, Исак. Я не делаю неуправляемый код. У меня еще не хватило смелости попытаться это сделать. :)
это вполне могло быть проблемой, Микаэль, спасибо за ссылку. (Хотя у меня нет возможности проверить, поскольку этот код, о котором я говорил, давно заброшен)
Если это трассировка стека, то это связано с привязкой данных, а не с опубликованной вами строки. Возможно ли, что у вас действительно большой набор данных? Я видел, как 6000-страничный GridView переполняет Int16, хотя кажется маловероятным, что вы действительно переполните Int32 ...
Убедитесь, что вы передаете нормальные данные, например, в startpageIndex или pageSize вашего источника данных.
Строка запроса передавала строку длиной от 8 цифр. Глупая ошибка, которую я должен был поймать. Я просто никогда раньше не видел этой конкретной ошибки. Спасибо, что указали мне правильное направление!
Не могли бы вы дать нам еще код?