У меня есть пользовательский элемент управления, который я создаю (ASP.NET 3.5, использующий C #).
Этот элемент управления в значительной степени основан на другом, аналогичном элементе управления (к сожалению, наследование «вырезать и вставить», но не так-то простоспособ абстрагировать это).Строки, которые вызывают у меня проблемы, напрямую копируются с другого элемента управления, как и большая часть дисплея.
Соответствующие строки кода следующие:
Panel pnlForm = (Panel)e.Item.FindControl("pnlForm");
Literal ltrAvailableCount = (Literal)e.Item.FindControl("ltrAvailableCount");
DropDownList drpLanguage = (DropDownList)pnlForm.FindControl("drpLanguage");
DropDownList drpShipTo = (DropDownList)pnlForm.FindControl("drpShipTo");
HiddenField hdnAvailableProductId = (HiddenField)pnlForm.FindControl("hdnAvailableProductId");
DropDownList drpQuantity = (DropDownList)pnlForm.FindControl("drpQuantity");
HiddenField hdnSelectedStyle = (HiddenField)e.Item.FindControl("hdnSelectedStyle");
Label lblStyleName = (Label)e.Item.FindControl("lblSelectedStyle");
pnlForm
в вышеприведенном коде найдено правильно, как и ltrAvailableCount
.
Если я пропущу до drpQuantity
, он и следующие строки работают нормально.Однако, когда я запускаю строки для drpLanguage
, drpShipTo
или hdnAvailableProductId
FindControl
, выдает NullReferenceException
.
, я не имею в виду, что он возвращает «ноль», и я пытаюсь получить доступ кСвойство возвращаемого объекта, метод FindControl
выдает исключение.Согласно библиотеке MSDN, это невозможно - FindControl
ничего не перечисляет как потенциальную ошибку, а просто говорит, что если не удается найти элемент управления, он возвращает ноль.
Чтоможет вызвать FindControl
к NullReferenceException?
----------------- Редактировать ---------------
Я должен также упомянуть, что, если я запускаю любую из трех проблемных строк в ближайшем окне, я получаю правильные результаты.Я также вижу элементы управления в ControlCollection
из pnlForm
, когда проверяю их во время отладки.
----------------- 2nd Edit -------------------
Просто для подтверждения я добавил еще одну строку: DropDownList notThere = (DropDownList) pnlForm.FindControl ("notHere");Элемент управления notHere
отсутствует на странице.Приведенная выше строка компилируется (конечно), и когда я запускаю отладчик, он работает нормально.Актерский состав идет отлично.Переменная notThere
просто равна нулю.
Основной причиной этой проблемы является то, что FindControl не может найти элементы управления и пытается преобразовать ноль в DropDownList или другой элемент управления