저는 (ASP.NET 3.5, C#을 사용하여) 사용자 정의 컨트롤을 만들고 있습니다.FindControl()에서 NullReferenceException을 발생시키는 원인은 무엇입니까?
이 컨트롤은 대체로 다른 비슷한 컨트롤을 기반으로합니다 (불행히도 이것을 상속하는 쉬운 방법은 없습니다). 나를 괴롭히는 선은 대부분의 디스플레이와 마찬가지로 다른 컨트롤에서 직접 복사됩니다. 다음 코드
관련 라인은 다음과 같이 ltrAvailableCount
위에서
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
을 정확하게 알 수있다.
drpQuantity
으로 건너 뛸 때 그 줄과 다음 줄이 올바르게 작동합니다. 그러나 drpLanguage
, drpShipTo
또는 hdnAvailableProductId
FindControl
에 대한 행을 실행할 때 NullReferenceException
을 던집니다.
'null'을 반환하고 반환 된 개체의 속성에 액세스하려고 시도하지 않습니다. 메서드 FindControl
이 예외를 throw합니다. MSDN 라이브러리에 따르면 이것은 가능하지 않습니다. FindControl
은 잠재적 인 오류가 발생했음을 표시하지 않으며 Control을 찾을 수 없으면 null을 반환합니다.
NullReferenceException에 FindControl
이 발생할 수있는 원인은 무엇입니까?
----------------- 편집 ---------------
나는 또한 언급해야것을 내가 실행하면 어떤 바로 가기 창에서 문제가되는 세 줄 중 올바른 결과를 얻을 수 있습니다. 디버깅 중에 검사 할 때 ControlCollection
pnlForm
의 컨트롤을 볼 수도 있습니다.
---------------
그냥 확인하고, 다른 줄을 추가했습니다 : DropDownList notThere = (DropDownList) pnlForm.FindControl ("notHere"); 컨트롤 notHere
은 페이지의 어느 부분에도 없습니다. 위의 줄은 (물론) 컴파일되고 디버거를 실행하면 정상적으로 실행됩니다. 캐스트가 잘됩니다. 변수 notThere
은 단순히 null입니다.
이 문제의 근본 원인이다 NOT 컨트롤을 찾기 위해 실패하고 그것이합니다() 컨트롤을 찾지의
당신이 pnlForm가 null이 아닌 확신 (새끼 고양이가 그것을 사용하는 사망) .... 전 세계적으로 학대하는 기능입니다? 디버깅 중에 다시 확인하십시오. – jrummell
FindControl을 호출하는 객체 중 하나가 null이 아닌 것이 확실합니까? –
FindControl()이'null'을 반환한다고 상상해보십시오. 캐스트가 'DropDownList'작업에 사용됩니까? 나는 단지 내가 생각하고있는 것을 타이핑하고있다 ... – Bazzz